2014-07-01 8 views
1
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。 但它从来没有过线:为什么它永远不会进入按钮单击并使FillRectangle?

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

我用了一个断点,当我移动鼠标光标移到按钮,它停在:

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

而且继续永远不会进入。 IF线有问题。

编辑:

这是我所看到的,当我把鼠标移动到按钮上:

Mouse cursor over button

,我想,当我在按钮上移动鼠标光标和/或点击在它上面,它会保持透明,就像它处于原始状态。这是原来的状态时,运行了一个程序,鼠标光标IM是不在按钮:

Original

这是现在使用的代码IM:

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

+0

我想你需要检查你的规则,如果,你想检查什么?你需要什么? – felipekm

+0

你可以选择和悬停在3个条件,以检查哪些是意外错误.. – TaW

回答

1

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

如果您不想绘画,您可以重写绘画方法,然后不要调用base方法,也不要执行其他任何操作。例如:

protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) { 
} 

但是,这并不总是奏效。这取决于这是否实际上是你想要防止的绘画的地方。

+0

Sahuagin我试过你的解决方案,其实我用我自己的MyRenderer类代码,我只是没有使用基线。在所有情况下,我检查到目前为止它的工作。我不明白什么时候它不应该工作?在什么情况下它不起作用? – user3788761

+0

@ user3788761如果有效,它可以工作。我不知道你是如何使用这个课程的,所以我无法测试它。通过“它不总是工作”我的意思是,这一切都取决于这是否是正确的方法来覆盖。另外,我也看到了一些控制,您可能希望通过这样做来阻止某些绘图,但绘图不会消失。但是,如果你尝试了它并且工作,那么它就可以工作。 –

+0

Sahuagin最后一个问题抱歉。我添加了tooltrip按钮的鼠标输入事件,并且在里面我尝试着用红色对前景进行着色,但是它没有做任何事情。 private void toolStripButton1_MouseEnter(object sender,EventArgs e) toolStripButton1.ForeColor = Color.Red; }为什么它不会以红色着色? – user3788761

相关问题