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

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

注意:请参阅下面的猎豹答案,因为它标识了获得此解决scheme的先决条件。 设置TextBoxBackColor


我想你真正想要做的是启用TextBox ,并将ReadOnly属性设置为true

更改禁用TextBox文本的颜色有点棘手。 我想你可能不得不inheritance和重写OnPaint事件。

ReadOnly虽然应该给你相同的结果!Enabled并允许您保持对TextBox的颜色和格式的控制。 我认为它也将支持从TextBoxselect和复制文本,这对于禁用的TextBox是不可能的。

另一个简单的select是使用Label而不是TextBox

此外,为了使ForeColor在标有ReadOnly的文本框上被遵从,您必须明确地设置BackColor。 如果你想让它仍然使用默认的BackColor,那么你必须明确这个设置,因为这里的devise师太聪明了。 将BackColor设置为当前值就足够了。 我在表单的Load事件中这样做,如下所示:

 private void FormFoo_Load(...) { txtFoo.BackColor = txtFoo.BackColor; } 

嗨设置readonly属性为真正的代码端或运行时间不是从devise时间

 txtFingerPrints.BackColor = System.Drawing.SystemColors.Info; txtFingerPrints.ReadOnly = true; 

我刚刚find了一个很好的方法。 在我的例子中,我正在使用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); } } 

您可以安全地设置Enabled = true和ReadOnly = false,它将像标签一样工作,防止焦点,用户input,光标更改,而不会实际禁用。

看看它是否适合你。 问候

你可以试试这个 重写TextBox的OnPaint事件。

  protected override void OnPaint(PaintEventArgs e) { SolidBrush drawBrush = new SolidBrush(ForeColor); //Use the ForeColor property // Draw string to screen. e.Graphics.DrawString(Text, Font, drawBrush, 0f,0f); //Use the Font property } 

将ControlStyles设置为“UserPaint”

 public MyTextBox()//constructor { // This call is required by the Windows.Forms Form Designer. this.SetStyle(ControlStyles.UserPaint,true); InitializeComponent(); // TODO: Add any initialization after the InitForm call } 

Refrence

或者你可以试试这个黑客

在Enter事件中设置焦点

 int index=this.Controls.IndexOf(this.textBox1); this.Controls[index-1].Focus(); 

所以你的控制不会集中,行为像禁用。

只需处理启用更改并将其设置为您需要的颜色

 private void TextBoxName_EnabledChanged(System.Object sender, System.EventArgs e) { ((TextBox)sender).ForeColor = Color.Black; } 

如果要显示无法编辑或select的文字,只需使用标签即可

除了@ spoon16和@Cheetah的回答之外,我总是在文本框上将tabstop属性设置为False,以防止文本被默认选中。

另外,你也可以做这样的事情:

 private void FormFoo_Load(...) { txtFoo.Select(0, 0); } 

要么

 private void FormFoo_Load(...) { txtFoo.SelectionLength = 0; }