Отображение контекстного меню для элементов TreeView в C#

В этом примере отображаются различные контекстные меню при щелчке правой кнопкой мыши на разных типах узлов в элементе управления TreeView. В этом примере различные узлы представляют собой фабрики, группы или отдельные лица. Различные типы узлов отображают различные контекстные меню.

При запуске программа добавляет данные в свой элемент управления TreeView, как в примере Отображать подсказки для узлов TreeView в C# . Когда вы нажимаете правую кнопку мыши по узлу, выполняется следующий обработчик событий MouseDown.

// Отображение соответствующего контекстного меню.
private void trvOrg_MouseDown(object sender, MouseEventArgs e)
{
    // Убедитесь, что это правая кнопка.
    if (e.Button != MouseButtons.Right) return;

    // Выберите этот узел.
    TreeNode node_here = trvOrg.GetNodeAt(e.X, e.Y);
    trvOrg.SelectedNode = node_here;

    // Посмотрим, есть ли у нас узел.
    if (node_here == null) return;

    // Посмотрим, что это за объект и
    // отобразим соответствующее всплывающее меню.
    if (node_here.Tag is FactoryData)
        ctxFactory.Show(trvOrg, new Point(e.X, e.Y));
    else if (node_here.Tag is GroupData)
        ctxGroup.Show(trvOrg, new Point(e.X, e.Y));
    else if (node_here.Tag is PersonData)
        ctxPerson.Show(trvOrg, new Point(e.X, e.Y));
}

Если кнопка мыши не является правой кнопкой, код ничего не делает. Если это правильная кнопка, в коде используется метод GetNodeAt элемента управления TreeView, чтобы найти узел под мышью. Он устанавливает для этого узла свойство SelectedNode элемента управления TreeView. Если узел имеет значение null, тогда происходит удаление обработчика событий.

Если код добирается так далеко (это правая кнопка мыши и есть узел под мышью), тогда программа проверяет тип объекта, содержащегося в свойстве Tag узла, и отображает соответствующий контекстное меню. Параметры вызова метода контекстного меню Show указывают, какое управление связано с меню и где должно располагаться меню.

Все контекстные меню имеют команду Delete, помеченную соответствующим образом: Delete Factory, Delete Group или Delete Person.

Следующий код показывает код за каждым из команд контекстного меню «Удалить».

private void mnuFactoryDelete_Click(object sender, EventArgs e)
{
    trvOrg.SelectedNode.Remove();
}

private void mnuGroupDelete_Click(object sender, EventArgs e)
{
    trvOrg.SelectedNode.Remove();
}

private void mnuPersonDelete_Click(object sender, EventArgs e)
{
    trvOrg.SelectedNode.Remove();
}

Источник: http://csharphelper.com/blog/2017/04/display-context-menus-for-treeview-items-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Adblock
detector