如何使用禁用的ToolStripButton以彩色绘制图像?

时间:2009-02-10 10:03:49

标签: c# .net winforms toolstripbutton

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

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

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

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您可以将ToolStripButton Image设置为BackgroundImage
然后将DiplayStyle设置为None

无论按钮Enabled的值是什么,图片都应保持彩色。

答案 2 :(得分:0)

另一种方式:根本不设置button.Enabled = false。只需设置button.Checked = truefalse,当有人点击Checked状态的按钮测试时,就可以执行任何操作。然后按钮将按您的意愿运行并保持颜色。

答案 3 :(得分:0)

几个星期前我就是这个案子而且这个问题没有答案,所以这是我4年后的解决方案:

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

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

    ToolStrip类:

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

    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的原因