如何更改禁用的TextBox的字体颜色?
有谁知道哪些属性设置为禁用控件的文本颜色? 我必须在禁用的TextBox
显示一些文本,我想将其颜色设置为黑色。
注意:请参阅下面的猎豹答案,因为它标识了获得此解决scheme的先决条件。 设置TextBox
的BackColor
。
我想你真正想要做的是启用TextBox
,并将ReadOnly
属性设置为true
。
更改禁用TextBox
文本的颜色有点棘手。 我想你可能不得不inheritance和重写OnPaint
事件。
ReadOnly
虽然应该给你相同的结果!Enabled
并允许您保持对TextBox
的颜色和格式的控制。 我认为它也将支持从TextBox
select和复制文本,这对于禁用的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; }