题
我需要显示变长的消息,并允许文本应可选择的。我已经做出的文本只读不允许被编辑的文本,但输入插入仍然是显示。
闪烁的输入插入是令人困惑。我如何隐藏它?
解决方案
你可以通过一个win32呼叫
[DllImport("user32.dll")]
static extern bool HideCaret(IntPtr hWnd);
public void HideCaret()
{
HideCaret(someTextBox.Handle);
}
其他提示
当使用的win32呼吁不要忘了隐藏的光标在文本的GotFocus事件。
只是为了完整起见,我需要这种功能使用一个 DevExpress它 TextEdit
控制.
他们已经这样做提供了一个 ShowCaret
和一个 HideCaret
方法,不幸的是,他们都受到保护。因此,我创造了一个衍生类,可提供的功能。这里是全代码:
public class MyTextEdit : TextEdit
{
private bool _wantHideCaret;
public void DoHideCaret()
{
HideCaret();
_wantHideCaret = true;
}
public void DoShowCaret()
{
ShowCaret();
_wantHideCaret = false;
}
protected override void OnGotFocus(EventArgs e)
{
base.OnGotFocus(e);
if (_wantHideCaret)
{
HideCaret();
}
}
}
使用的代码,只需使用的源类,而不是原始的 TextEdit
类代码中的呼叫 DoHideCaret()
任何地方,例如在构造的形式,其中包含的文字编辑控制。
也许这是有用的人的未来。
如果禁止该文箱(设置 Enable=false
),案文,它仍然是滚动的和可选择的。如果你不喜欢的视觉介绍禁用文本框(灰色背景,通常)可以手动复盖的颜色。
被警告手动压倒一切的颜色是要让你的形式/控制看起来很怪异的系统上不使用默认的颜色主题设置。不要假设,因为你控制白,每个人的控制将是白色的。这就是为什么你总是应该使用该系统的颜色尽可能(定义 System.Drawing.SystemColors
枚举)这样的 SystemColors.ControlLight
.
据我所知,这个 不能 要做。文本框控制是一个有趣的控制,因为它实际上有一个 很多 行为不能被修改,由于它的水龙头进入操作系统。这就是为什么许多很酷的定义的文本框书面从零开始。
我怕你可能不能做你想要做的:(
不隶属于 StackOverflow