我们有一个按钮,允许用户“锁定”表单。用户不允许“解锁”表单,因此在按下时,我们希望禁用该按钮,以便用户收到适当的视觉反馈。
但是,客户报告灰色的“锁定”图标向他们建议表单未锁定,因此我们希望按下状态显示按钮,但图标颜色为“即使按钮是禁用。
我们如何做到这一点,绝对最少量的被覆盖的绘画?
答案 0 :(得分:1)
其实我不同意这种做法。您的客户可能有一个有效点,但我认为他们没有正确的修复建议。您应该研究其他方式使表单显示为“锁定”。更改边框或字体颜色,显示一个大的挂锁图标或从打开更改为关闭等。按钮看起来是某种方式,因为这是用户期望的。如果您有一个看起来可能已启用的禁用按钮,则会使那些可能无法理解无法点击它的用户感到困惑。
答案 1 :(得分:0)
您可以将ToolStripButton Image
设置为BackgroundImage
然后将DiplayStyle
设置为None
。
无论按钮Enabled
的值是什么,图片都应保持彩色。
答案 2 :(得分:0)
另一种方式:根本不设置button.Enabled = false
。只需设置button.Checked = true
或false
,当有人点击Checked
状态的按钮测试时,就可以执行任何操作。然后按钮将按您的意愿运行并保持颜色。
答案 3 :(得分:0)
几个星期前我就是这个案子而且这个问题没有答案,所以这是我4年后的解决方案:
我在很多情况下使用此解决方案重新绘制ToolStripButton:已禁用,已选中,已选中
帮助我的两个好例子:
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的原因