禁用控件的文本颜色 – 如何更改它

在创建我精彩的匹配游戏期间;)我发现了一个完全无法触及的问题。

当玩家选择带有符号的两个标签时,我想锁定所有其他标签4秒钟。

但是,当我这样做时,所有标签的前景颜色变为灰色,符号可见。 我的问题是 – 是否有一种方法可以在visual c#中更改禁用标签的ForeColor

该项目是一个WinForm应用程序。

目前我以这种方式在代码中设置标签的颜色:

 label1.ForeColor = lable1.BackColor; 

当用户点击标签时,我将其更改为:

 lable1.ForeColor = Color.Black; 

比尝试更改Windows绘制禁用控件的方式更简单的方法是在希望Label被有效“禁用”时简单地设置一个标志,然后在执行任何您想要的操作之前检查Click事件处理程序方法中该标志的值。 如果控件已被“禁用”,则不要采取任何操作。

像这样的东西:

 private bool labelDisabled = false; private void myLabel_Click(object sender, EventArgs e) { if (!labelDisabled) { this.ForeColor = SystemColors.ControlText; } } 

另请注意,您应始终使用SystemColors而不是Color.Black
如果您对特定颜色值进行硬编码,则在用户自定义其默认Windows主题时,它们通常会发生冲突。 Raymond Chen在他博客上的一篇文章中讨论了这个问题。

只需使用重新定义的绘制事件创建自己的标签:

 protected override void OnPaint ( System.Windows.Forms.PaintEventArgs e ) { if ( Enabled ) { //use normal realization base.OnPaint (e); return; } //custom drawing using ( Brush aBrush = new SolidBrush( "YourCustomDisableColor" ) ) { e.Graphics.DrawString( Text, Font, aBrush, ClientRectangle ); } } 

在文本绘制过程中要小心文本格式标志。