контекстное меню на пользовательском контроле? - PullRequest
2 голосов
/ 01 января 2012

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

В обработчике событий MouseClick моего usercontrol я определяю, на какой виджет щелкнул пользователь. Затем я проверяю, является ли кнопка мыши правой кнопкой. Если это так, я отображаю меню, которое должно позволить пользователю удалить виджет:

if (e.Button == MouseButtons.Right)
{
    ContextMenu deleteMenu = new ContextMenu();
    MenuItem deleteItem = new MenuItem("Delete...", new System.EventHandler(this.onDeleteMenuItem_Click));
    deleteMenu.MenuItems.Add("Delete");
    deleteMenu.Show(this, new Point(mouseXPosition, mouseYPosition));
}

Мой обработчик для этого элемента:

private void onDeleteMenuItem_Click(object sender, EventArgs e)
{
    System.Diagnostics.Debug.WriteLine("Deleting...");
}

Когда я щелкаю правой кнопкой мыши, отображается меню, но обработчик никогда не вызывается. Что я делаю не так?

1 Ответ

6 голосов
/ 01 января 2012

Я подозреваю, что это потому, что вы не добавляете пункт меню:

Измените эту строку кода:

deleteMenu.MenuItems.Add("Delete");

на:

deleteMenu.MenuItems.Add(deleteItem);
...