14

在创建我很棒的配对游戏期间;)我发现了一个完全无法解决的问题。

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

但是当我这样做时,所有标签的前景色都变为灰色,并且符号可见。我的问题是 - 有没有一种方法可以更改ForeColorVisual c# 中的禁用标签?

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

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

label1.ForeColor = lable1.BackColor;

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

lable1.ForeColor = Color.Black;
4

2 回答 2

12

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

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 );
    }
}

在文本绘制过程中注意文本格式标志。

于 2011-05-14T15:20:34.830 回答
10

比尝试更改 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在他的博客上的一篇文章中讨论了这种风险。

于 2011-05-14T15:17:00.273 回答