1

我们有一个允许用户“锁定”表单的按钮。不允许用户“解锁”表单,因此当按下时,我们希望禁用按钮,以便用户收到适当的视觉反馈。

但是,客户报告说灰色的“锁定”图标向他们表明表单未锁定,因此我们希望将按钮显示为按下状态,但图标为彩色,即使按钮被禁用。

我们如何做到这一点,以绝对最小数量的覆盖绘画?

4

4 回答 4

1

您可以设置ToolStripButton ImageBackgroundImage
,然后设置DiplayStyleNone

无论按钮Enabled值是多少,图片都应保持颜色。

于 2009-02-10T10:19:34.787 回答
1

其实我不同意这种做法。您的客户可能有一个有效的观点,但我认为他们没有正确的修复建议。您应该研究使表单显示为“锁定”的其他方法。更改边框或字体颜色,出现大挂锁图标或从打开变为关闭等。按钮看起来有一定的方式,因为这是用户所期望的。如果你有一个禁用的按钮,看起来它可能已启用,这会让用户感到困惑,他们可能不明白为什么他们不能点击它。

于 2009-02-10T10:23:29.583 回答
1

几周前我遇到过这种情况,这个问题没有答案,所以这是我 4 年后的解决方案:

在许多情况下,我使用此解决方案重新绘制 ToolStripButton:禁用、选中、选中

  1. 覆盖 OnPaint 事件或更改 ToolStrip 的渲染器
  2. 使用此方法绘制没有灰色滤镜的图像,只需在按钮上设置按钮的图像和图像的位置:http: //msdn.microsoft.com/en-us/library/chas0s9c (v=vs.110).aspx

两个帮助我的好例子:

工具条类:

ToolStrip ts = new ToolStrip();
//[...]
ts.RenderMode = ToolStripRenderMode.Professional; //Professional is just an example
ts.Renderer = new CustomRenderer();

自定义渲染器类:

public class CustomRenderer: ToolStripProfessionalRenderer
{
    protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e)
    {
        if (!e.Item.Enabled) //in this case you will just have the image in your button, you need to add text etc in this if
        {
             //to draw the image
             Graphics g = e.Graphics;
             g.DrawImageUnscaled(e.Item.Image, new Point(2, 2)); //you need to specify the correct position
        }
        else //other cases
            base.OnRenderButtonBackground(e);
     }
}

问题是要知道 ToolStripButton 中所有元素的正确位置,这就是我在每种情况下都绘制 ToolStripButton 的原因

于 2014-01-09T10:25:23.513 回答
0

另一种方式:根本不设置button.Enabled = false。只需设置button.Checked = truefalse和当有人点击按钮测试Checked状态并做任何你做的事情。然后,该按钮将按照您的意愿运行并保持彩色。

于 2009-02-10T10:23:57.350 回答