2011-11-14 97 views
0

我使用ToolStripDropDownButton和動態添加菜單項如下:ToolStripMenuItem及按鍵或KeyDown事件

toolStripDropDownButton1.DropDownItems.Clear(); 

ToolStripMenuItem item1 = new ToolStripMenuItem("Item1"); 
toolStripDropDownButton1.DropDownItems.Add(item1); 

ToolStripMenuItem item2 = new ToolStripMenuItem("Item2"); 
toolStripDropDownButton1.DropDownItems.Add(item2); 

我想刪除所選的菜單項時刪除鍵被按下。但ToolStripMenuItem沒有KeyPressKeyDown事件。

我正在使用Visual Studio 2010和.NET 4.0。有關如何實現此功能的任何建議?

+0

「* selected menu item *」是什麼意思?它是**懸停**菜單項? – Otiel

+0

是的,懸停的菜單項。謝謝。 – Din

回答

0

聽起來好像你想從下拉列表中刪除選定的項目,當你點擊單獨的刪除按鈕。那是你想要做什麼?如果是這樣,那麼您需要查看刪除按鈕的單擊事件並根據當前選定的項目刪除列表項目。 KeyDown KeyPress是不需要的。

+0

我沒有任何刪除按鈕,只有下拉菜單項。 我想按Delete鍵刪除選定的項目。問題是ToolStripMenuItem沒有KeyPress或KeyDown事件。 任何建議或解決方法? – Din

+0

哦,我明白了。那麼,不,你不能那樣做。 ToolStrip消耗所有的鍵盤事件。做你想做的事情的唯一方法是創建一個從原始的ToolStrip控件派生出來的新的ToolStrip控件,並添加你想要的位。我會重新思考你想達到的目標。 –

+0

感謝您的回覆。如果不能輕鬆完成,我可能需要使用不同的方法。 – Din

0

封閉的ToolStrip獲取的關鍵事件,因此您可以用類似有處理:

toolStripDropDownButton1.KeyDown += (s, e) => 
{ 
    if (e.KeyCode == Keys.Delete) 
    { 
     foreach (var item in ((ToolStrip)s).Items.OfType<ToolStripMenuItem>()) 
     { 
      if (item.Selected) 
      { 
       ((ToolStrip)s).Items.Remove(item); 
       break; 
      } 
     } 
    } 
}; 

(此代碼是完全未經測試)

我用((ToolStrip的)S)在事件處理程序內部,以便您可以在其他地方定義可由多個不同ToolStrip實例調用的靜態方法。當然,在這種情況下,您可以用替換((ToolStrip)s) toolStripDropDownButton1

0

您可以使用菜單中的DropDown元素,然後將KeyDown事件綁定到它。 現在您知道在菜單上按下哪個鍵,但您不知道用鼠標指針指向哪個菜單項。綁定MouseEnter事件ToolStripMenuItem s,您現在可以存儲哪個指向。現在您知道哪個項目被指向,並且當觸發的KeyDown事件時按下了哪個鍵。