2014-07-01 13 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

相關問題