2009-09-30 5 views
1

Я добавляю функциональность правой кнопки мыши на отдельных узлах treeView в моем коде C#. Параметры, такие как «Добавить», «Удалить», «Переименовать», должны появляться, когда пользователь щелкает правой кнопкой мыши в этих узлах дерева. Теперь, в зависимости от узла, который нажал, я заполняю меню, используя следующие statememnts:обработчики событий для объектов contextmenustrip

contextMenuStrip1.Items.Add ("Добавить");

Тогда, если через различные узлы в правой щелкнул я использую следующий:

contextMenuStrip1.Items.Add («Переименовать»);

Есть некоторые узлы, где должны отображаться оба элемента: contextMenuStrip1.Items.Add ("Добавить"); contextMenuStrip1.Items.Add ("Удалить");

Как написать отдельные обработчики событий для добавления и удаления, если они оба существуют в контексте menustrip. Я не могу отличить, было ли нажато «Добавить» или «Удалить». В настоящее время я использую событие «ItemClicked» в ContextMenuStrip для выполнения моей части кода в обработчике событий для «Добавить», но этот evemt также поднимается при нажатии «Удалить». Любая помощь будет оценена по достоинству.

Спасибо, Viren

ответ

1

Метод ToolStripItem.Add (строковый текст) возвращает 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

Можно привести объект отправителя к 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.

Смежные вопросы