如何在System.Windows.Forms.TextBox中隐藏输入插入符?

时间:2008-09-04 16:32:38

标签: winforms textbox

我需要显示一个可变长度的消息,并允许文本可选。我已经制作了TextBox ReadOnly,它不允许编辑文本,但仍然显示输入插入符号。

闪烁的输入插入符号令人困惑。我该如何隐藏它?

6 个答案:

答案 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

这样的功能

他们已经提供了ShowCaretHideCaret方法,不幸的是它们受到了保护。因此,我创建了一个提供功能的派生类。这是完整的代码:

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都是从头开始编写的。

恐怕你可能无法做你想做的事:(