如何更改禁用TextBox的字体颜色?

Nik*_*lin 58 c# winforms

有谁知道哪个属性设置禁用控件的文本颜色?我必须在禁用中显示一些文本,TextBox并且我想将其颜色设置为黑色.

Eri*_*ver 56

注意:请参阅下面的Cheetah答案,因为它确定了使此解决方案起作用的先决条件.设置BackColorTextBox.


我认为你真正想做的是启用TextBox并设置ReadOnly属性true.

更改禁用文本的颜色有点棘手TextBox.我想你可能必须子类化并覆盖OnPaint事件.

ReadOnly虽然应该给你相同的结果,!Enabled并允许你保持对颜色和格式的控制TextBox.我认为它仍然支持从TextBox禁用中选择和复制文本TextBox.

另一个简单的替代方案是使用a Label而不是a TextBox.


Che*_*tah 55

此外,为了在标记为ReadOnly的TextBox上遵守ForeColor,您必须显式设置BackColor.如果你想让它仍然使用默认的BackColor,你必须明确设置,因为设计师在这里太聪明了.将BackColor设置为当前值就足够了.我在表单的Load事件中执行此操作,如下所示:

private void FormFoo_Load(...) {
    txtFoo.BackColor = txtFoo.BackColor;
}
Run Code Online (Sandbox Code Playgroud)

  • IIRC,有一个标志可以检查颜色是否已经定制.除非设置了BackColor,否则不会设置该标志.我现在找不到它,但如果你在Reflector中翻找,你或许可以. (4认同)

小智 5

嗨,从代码端将readonly属性设置为true,或者将运行时设置为不是从设计时间

txtFingerPrints.BackColor = System.Drawing.SystemColors.Info;
txtFingerPrints.ReadOnly = true;
Run Code Online (Sandbox Code Playgroud)


edo*_*edo 5

我刚刚找到了一个很好的方法。在我的示例中,我使用的是 RichTextBox,但它应该适用于任何控件:

public class DisabledRichTextBox : System.Windows.Forms.RichTextBox
{
    // See: http://wiki.winehq.org/List_Of_Windows_Messages

    private const int WM_SETFOCUS   = 0x07;
    private const int WM_ENABLE     = 0x0A;
    private const int WM_SETCURSOR  = 0x20;

    protected override void WndProc(ref System.Windows.Forms.Message m)
    {
        if (!(m.Msg == WM_SETFOCUS || m.Msg == WM_ENABLE || m.Msg == WM_SETCURSOR))
            base.WndProc(ref m);
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以安全地设置 Enabled = true 和 ReadOnly = false,它就像一个标签,防止焦点、用户输入、光标更改,而不会被实际禁用。

看看它是否适合你。你好