【问题标题】:Text color of disabled control - how to change it禁用控件的文本颜色 - 如何更改它
【发布时间】:2017-05-25 02:30:43
【问题描述】:

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

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

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

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

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

label1.ForeColor = lable1.BackColor;

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

lable1.ForeColor = Color.Black;

【问题讨论】:

  • 什么项目类型? WinForms、WPF、ASP.NET?
  • 你现在是如何设置颜色的?你能发布你的代码吗?
  • 标签总是“锁定”,至少在用户无法编辑文本或以其他方式操作它们的意义上。无需禁用它们即可获得该效果。

标签: c# .net winforms label disabled-control


【解决方案1】:

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

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

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

【讨论】:

【解决方案2】:

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

【讨论】:

  • 只是对“始终使用 SystemColors”建议的评论 - 我会说它应该总是或从不 - 例如,硬编码所有颜色的所有颜色或不使用任何颜色。有时您想自己控制事物的外观,而不是成为 Windows 主题的奴隶。但是不要把它们混在一起,那是你让事情发生冲突的时候。
  • 是的,这绝对是“全有或全无”的事情。但我对您的“Windows 主题的奴隶”措辞持异议。如果您将其视为“用户偏好的奴隶”,这会有所帮助。一个相当不错的主意。
猜你喜欢
  • 2011-06-11
  • 1970-01-01
  • 2016-11-20
  • 2011-11-22
  • 2020-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-10
相关资源
最近更新 更多