2009-09-30 40 views
1

我在C#代碼中的treeView的各個節點上添加了右鍵單擊功能。當用戶在樹上的這些節點上點擊右鍵時,彈出「添加」,「刪除」,「重命名」等選項。現在,根據正在點擊的節點,我使用以下狀態元素填充菜單:上下文菜單項的事件處理程序

contextMenuStrip1.Items.Add(「Add」);

然後,如果一個不同的節點是正確的點擊我使用下面的:

contextMenuStrip1.Items.Add(「重命名」);

有些節點需要顯示兩個項目:contextMenuStrip1.Items.Add(「Add」); contextMenuStrip1.Items.Add( 「刪除」);

如何爲上下文菜單欄中存在的兩者都添加和刪除時編寫單獨的事件處理程序。我無法區分是否單擊「添加」或「刪除」。目前,我在ContextMenuStrip上使用「ItemClicked」事件在「添加」事件處理程序中執行我的一段代碼,但單擊「刪除」時也會引發此日誌。任何幫助,將不勝感激。

感謝,Viren

回答

1

ToolStripItem.Add(string text)方法返回已添加的ToolStripItem。你應該這樣引用它們,當ItemClicked事件被觸發時,你可以確定哪一個被點擊。

E.x:

using System; 
      using System.Windows.Forms; 
      namespace WindowsFormsApplication6 
      { 
static class Program 
{ 
    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    [STAThread] 
    static void Main() 
    { 
     using (Form form = new Form()) 
     { 
      form.ContextMenuStrip = new ContextMenuStrip(); 
      ToolStripItem addMenuItem = form.ContextMenuStrip.Items.Add("Add"); 
      ToolStripItem deleteMenuItem = form.ContextMenuStrip.Items.Add("Delete"); 

      form.ContextMenuStrip.ItemClicked += (sender, e) => 
      { 
       if (e.ClickedItem == addMenuItem) 
       { 
        MessageBox.Show("Add Menu Item Clicked."); 
       } 
       if (e.ClickedItem == deleteMenuItem) 
       { 
        MessageBox.Show("Delete Menu Item Clicked."); 
       } 
      }; 
      Application.Run(form); 
     } 
    } 
} 

}

0

你可以施放sender對象到一個ContextMenuItem並檢查它的名稱屬性:

Private Sub ContextItem_Clicker(Byval sender As Object, Byval e As EventArgs) 
    Dim castedItem As ContextMenuItem = TryCast(sender, ContextMenuItem) 
    If castedItem IsNot Nothing Then 
     If castedItem.Name = "whatever" Then 
      ' Do something remotely useful here 
     End If 
    End If 
End Sub 

或者你對不同ContextItems添加不同的事件處理程序。

相關問題