我需要显示一个可变长度的消息,并允许文本可选。我已经制作了TextBox ReadOnly,它不允许编辑文本,但仍然显示输入插入符号。
闪烁的输入插入符号令人困惑。我该如何隐藏它?
答案 0 :(得分:13)
您可以通过win32通话
[DllImport("user32.dll")]
static extern bool HideCaret(IntPtr hWnd);
public void HideCaret()
{
HideCaret(someTextBox.Handle);
}
答案 1 :(得分:5)
使用win32时,请不要忘记将光标隐藏在文本框的GotFocus事件中。
答案 2 :(得分:3)
为了完整起见,我需要使用DevExpress WinForms TextEdit
control。
他们已经提供了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()
,例如在包含文本编辑控件的表单的构造函数中。
这可能对将来有人有帮助。
答案 3 :(得分:1)
如果禁用文本框(设置Enable=false
),则其中的文本仍可滚动并可选择。如果您不喜欢禁用文本框的视觉呈现(通常是灰色背景),您可以手动覆盖颜色。
请注意,手动覆盖颜色会使您的表单/控件在不使用默认颜色/主题设置的系统上看起来很奇怪。不要以为因为你的控制是白色的,所以每个人的控制都是白色的。这就是为什么你应该尽可能使用系统颜色(在System.Drawing.SystemColors
枚举中定义),例如SystemColors.ControlLight
。
答案 4 :(得分:-1)
我知道这是一个旧线程,但它是一个有用的参考。
我用一个更简单但非常笨拙的解决方案解决了这个问题,这可能取决于您对用户对表单的访问权限的控制程度。我添加了一个文本框(任何可以聚焦的控件),我给它提供了主要的 tabIndex 值,然后将其定位在形式之外,使其不可见。这在对话框上工作正常,因为用户无法调整大小。如果表单可以调整大小,这可能不起作用。
正如我所说,杂乱无章 - 但更容易设置。 (顺便说一句,我发现 HideCaret 方法不起作用 - 但我并没有努力追求。)
答案 5 :(得分:-4)
AFAIK,无法完成。 TextBox控件是一个有趣的控件,因为它实际上有一个 lot 的行为,由于它进入操作系统的方式无法修改。这就是为什么许多很酷的自定义TextBox都是从头开始编写的。
恐怕你可能无法做你想做的事:(