在创建令人敬畏的匹配游戏期间;)我发现了一个完全无法触及的问题。
当玩家选择带有符号的两个标签时,我想锁定所有其他标签4秒钟。
但是当我这样做时,所有标签的前景颜色变为灰色,符号可见。我的问题是 - 是否有一种方法可以在visual c#中更改已禁用标签的ForeColor
该项目是一个WinForm应用程序。
目前,我以这种方式在代码中设置标签的颜色:
label1.ForeColor = lable1.BackColor;
当用户点击标签时,我将其更改为:
lable1.ForeColor = Color.Black;
答案 0 :(得分:9)
方式比尝试更改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在他博客上的一篇文章中讨论了这个问题。
答案 1 :(得分:8)
使用重新定义的绘制事件创建自己的标签:
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 );
}
}
在文本绘制过程中注意文本格式标记。