为什么它永远不会进入按钮点击并制作FillRectangle?

时间:2014-07-01 00:01:20

标签: c# .net winforms

private class MyRenderer : ToolStripProfessionalRenderer
{
  protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e)
  {
    var btn = e.Item as ToolStripButton;
    if (btn != null && btn.CheckOnClick && btn.Checked)
    {
      Rectangle bounds = new Rectangle(Point.Empty, e.Item.Size);
      e.Graphics.FillRectangle(Brushes.Transparent, bounds);
    }
    base.OnRenderButtonBackground(e);
  }
}

我希望当我将鼠标移到按钮上或点击它时,然后制作fillrectangle。 但它永远不会过关:

if (btn != null && btn.CheckOnClick && btn.Checked)

当我将鼠标光标停在它停止的按钮上时,我使用了一个断点:

if (btn != null && btn.CheckOnClick && btn.Checked)

继续进入。 IF线有问题。

编辑:

当我将鼠标移到按钮上时,这就是我所看到的:

Mouse cursor over button

我希望当我将鼠标光标移到按钮上或/并点击它时,它将保持透明状态,就像它处于原始状态一样。当我运行我的程序并且鼠标光标没有在按钮上时,这是原始状态:

Original

这是我现在使用的代码:

private class MyRenderer : ToolStripProfessionalRenderer
        {
            protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e)
            {
                var btn = e.Item as ToolStripButton;
                if (btn != null || btn.CheckOnClick || btn.Checked)
                {
                    Rectangle bounds = new Rectangle(Point.Empty, e.Item.Size);
                    e.Graphics.FillRectangle(Brushes.Transparent, bounds);
                }
                 base.OnRenderButtonBackground(e);
            }
        }

它正在排队:

Rectangle bounds = new Rectangle(Point.Empty, e.Item.Size);
e.Graphics.FillRectangle(Brushes.Transparent, bounds);

但是按钮周围的颜色仍然是浅蓝色,就像我上传的第一个屏幕截图一样。 有什么方法可以改变吗?

我想要做的就像在Internet Explorer 11中,当您将鼠标移到右上角的图标/图像上时,图标/图像会改变颜色,但周围没有矩形:

这是来自Internet Explorer常规状态的屏幕截图:

Internet explorer mouse cursor not over

当鼠标光标位于其中一个图标/图像上时,这是Internet Explorer:

Internet explorer mouse cursor is over icon/image

1 个答案:

答案 0 :(得分:1)

我不认为透明绘画会产生任何视觉效果。那就像用水画画。

如果你不想画一些东西,你会覆盖绘画方法,然后不要调用base方法而不做任何其他事情。例如:

protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) {
}

但是,这并不总是有效。这将取决于你是否真的想要阻止它的绘画。