如何禁用闪烁文本行?

时间:2014-08-24 04:52:48

标签: c# textbox label readonly

我有一个文本框控件,我通过将readonly和border属性分别设置为true和none来将其模拟为标签,因此它可以突出显示。一切正常,但是当我点击文本框时,它会显示闪烁的文本符号(这是一个闪烁的l表示你可以在这里输入,不知道它叫什么)。

如果我将enabled属性设置为false,它会消失,但无法突出显示,文本也会显示为灰色。

有没有办法解决这个问题?像其他类型的控制?

3 个答案:

答案 0 :(得分:0)

文字符号会闪烁我不知道天气你可以禁用闪烁更好你可以使用标签我认为这是好的检查文本框的可见性属性可能会是错误的,这就是为什么你不能能够看到。

通过代码也可以启用可见性

       textboxname.visible= true;

答案 1 :(得分:0)

为你的项目调整这个css属性。

input[disabled] {
        background-color: #b5f0fa;
        border: 1px solid;
        color: Black;
        font-weight: bold;
    }

答案 2 :(得分:0)

小小的"闪烁的文字行"被称为caret。它就像一个光标(用鼠标移动的东西),除了它出现在文本中。

你在问题​​中描述的是正常行为。你在Windows shell中看到了完全相同的东西。右键单击任何位置(例如桌面)中的任何图标,然后打开其"属性"窗口。然后单击任何一个属性标签(例如,"位置&#34下的路径;)。你会看到同样的事情。

那里有一个插入符号,闪烁在字母" i"之外,您甚至可以看到选择突出显示。这是设计,选择突出显示是一个重要的线索。

您使用只读文本框而不是标签的原因是允许用户从控件中选择文本。如果您不想允许,请使用标签。


如果你绝对必须使用只读文本框但仍想隐藏插入符号,那么你可以p / invoke HideCaret function。通过在文本框控件获得焦点后立即调用此函数,它将无法显示插入符号。但是,对HideCaret的每次通话都必须与对ShowCaret的通话配对,因此当您的文本框控件失去焦点时,您需要致电ShowCaret

您可以将处理程序连接到特定文本框控件的GotFocusLostFocus事件,并将代码放在那里。但是在派生控件类中执行此操作更简洁,尤其是如果您希望多个文本框的行为方式相同。这样的事情(代码未经测试):

internal class NativeMethods
{
    [DllImport("user32.dll", SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    public static extern bool ShowCaret(IntPtr hwnd);

    [DllImport("user32.dll", SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    public static extern bool HideCaret(IntPtr hwnd);
}

public class ReadOnlyTextBox : System.Windows.Forms.TextBox
{
    public ReadOnlyTextBox()
    {
        this.ReadOnly = true;
    }

    protected override void OnGotFocus(EventArgs e)
    {
        NativeMethods.HideCaret(this.Handle);
    }

    protected override void OnLostFocus(EventArgs e)
    {
        NativeMethods.ShowCaret(this.Handle);
    }
}