2011-07-20 31 views
3

我有一個執行操作的ToolStripButton。用戶單擊該按鈕並禁用該按鈕以防止該操作執行兩次。操作完成後,該按鈕將重新啓用。這一切都完美...除了:ToolStripButton「重置外觀」/「消失事件」

因爲該按鈕被禁用它不會觸發「MouseLeave」事件,因此該按鈕的外觀不會更新。爲了清楚起見,當鼠標進入ToolStripButton時,該按鈕以橙色突出顯示(默認情況下),並且周圍有一個黑色框。當我重新啓用按鈕時,此高光不會被刪除。此時,鼠標光標遠離控制。鼠標移動到按鈕上通過重新繪製按鈕自然修復該按鈕。

我想要做的是在ToolStripButton上「重置」它的外觀。這種方法甚至可能存在於ToolStrip上,但儘管搜索我一直無法找到像這樣的東西。

作爲替代方案,我可以直接在按鈕上觸發「鼠標離開」事件。據我所知在C#.NET中沒有辦法輕鬆做到這一點。

在這個時間點的任何建議將非常感激,自然我不想撕毀我的申請並更換工具條。

+0

'行動'究竟是什麼?它凍結了用戶界面嗎?你真的看到按鈕變成灰色嗎? –

回答

1

更新: 我轉載了你的問題,試圖搞清楚!

我沒有得到除重置風格Click事件

private void toolStripButton1_Click(object sender, EventArgs e) 
    { 
     toolStripButton1.BackColor = Color.FromKnownColor(KnownColor.Control); 
     toolStripButton1.Enabled = false; 
    } 

    private void toolStripButton1_MouseEnter(object sender, EventArgs e) 
    { 
     toolStripButton1.BackColor = Color.Red; 
    } 

    private void toolStripButton1_MouseLeave(object sender, EventArgs e) 
    { 
     toolStripButton1.BackColor = Color.FromKnownColor(KnownColor.Control); 
    } 

希望這有助於更好的辦法!


你試過Control.Invalidate()嗎?

來自MSDN:使控件的整個表面無效並導致控件被重繪。

+0

我確實嘗試了Control.Invalidate(),但重畫就是這樣一個重繪,控件只是在「鼠標懸停」狀態下重繪。 –

0

我有同樣的問題。我通過隱藏然後在任務完成後使用Visible屬性顯示ToolStripButton來「修復」它。

0

之前禁用的ToolStrip或的ToolStripItem:

private void RemoveHighlightFromToolStrip(ToolStrip toolStrip) 
     { 
      foreach (ToolStripItem item in toolStrip.Items) 
      { 
       if (item.Pressed || item.Selected) 
       { 
        item.Visible = false; 
        item.Visible = true; 
       } 
      } 
     } 

你也可以只隱藏和顯示整個ToolStrip的,但是這可能會影響你的表單其他控件(例如,如果你有一些停靠的DataGridView這將重繪)