10

我需要显示一条可变长度的消息并允许选择文本。我已将 TextBox ReadOnly 设为不允许编辑文本,但仍显示输入插入符号。

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

4

6 回答 6

16

您可以通过 win32 调用

[DllImport("user32.dll")]
static extern bool HideCaret(IntPtr hWnd);
public void HideCaret()
{
    HideCaret(someTextBox.Handle);
}
于 2008-09-04T16:58:24.247 回答
6

使用 win32 调用时,不要忘记在文本框的 GotFocus 事件中隐藏光标。

于 2010-03-01T21:58:45.030 回答
3

为了完整起见,我需要这样的功能来与DevExpress WinFormsTextEdit控件一起使用。

他们已经提供了一个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(),例如在包含文本编辑控件的表单的构造函数中。

也许这对将来的某人有帮助。

于 2013-05-13T05:03:39.290 回答
1

如果禁用文本框 (set Enable=false),其中的文本仍然可以滚动和选择。如果您不喜欢禁用文本框(通常为灰色背景)的视觉呈现,您可以手动覆盖颜色。

请注意,手动覆盖颜色会使您的表单/控件在不使用默认颜色/主题设置的系统上看起来很奇怪。不要假设因为你的控制是白色的,所以每个人的控制都是白色的。这就是为什么您应该尽可能始终使用系统颜色(在System.Drawing.SystemColors枚举中定义),例如SystemColors.ControlLight.

于 2008-09-04T16:40:26.333 回答
-1

我知道这是一个旧线程,但它是一个有用的参考。

我用一个更简单但非常复杂的解决方案解决了这个问题,这可能取决于您对用户对表单的访问权限的控制程度。我添加了一个文本框(任何可聚焦的控件),我给它提供了主要的 tabIndex 值,然后将其放置在表格之外,使其不可见。这在对话框上工作正常,因为用户无法调整大小。如果表单是可调整大小的,这可能不起作用。

正如我所说,一个杂物 - 但设置起来要容易得多。(顺便说一句,我发现 HideCaret 方法不起作用 - 但我没有努力追求它。)

于 2021-04-03T09:29:58.493 回答
-3

AFAIK,这是不可能的。TextBox 控件是一个有趣的控件,因为它实际上有很多行为由于它接入操作系统的方式而无法修改。这就是为什么许多很酷的自定义文本框都是从头开始编写的。

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

于 2008-09-04T16:58:16.667 回答