C# Событие открытия ContextMenu () - PullRequest
0 голосов
/ 23 марта 2020

Я портирую Windows Forms GUI, сделанный contextmenustrip, в код contextmenu в классе. (Я делаю «самосодержащий класс MS Chart», поэтому каждая создаваемая мной диаграмма может получить свое собственное контекстное меню.)

Вот пример кода с двумя пунктами меню и разделительной полосой:

    ContextMenu mymenustrip = new ContextMenu();
    zoomOutToolStripMenuItem = new MenuItem("Zoom Out", 
      new EventHandler(chart_ToolStripMenuItem_zoomOutClick));
    separator1ToolStripMenuItem = new MenuItem("-");
    mymenustrip.MenuItems.Add(zoomOutToolStripMenuItem);

и меню работают, легко копируются из журнала событий графического интерфейса c. И есть много онлайн-примеров, помогающих в этом. Но как мне поймать событие открытия меню ()? Исходное событие открытия () переформатирует меню, и я хочу сохранить эту функциональность. Я возился с этим:

mymenustrip.Popup += new EventHandler (chart_contextMenuStrip1_Opening)
...

, но этого, конечно, недостаточно. Вот текущая ошибка: «Ошибка CS0123 Нет перегрузки для« chart_contextMenuStrip1_Opening »соответствует делегату« EventHandler »». И это вступительное событие, сделанное VS GUI:

private void chart_contextMenuStrip1_Opening(object sender, CancelEventArgs e)
{
            if (zoomingNow)
            {
                e.Cancel = true;
                return;
            }
...
}

Очевидно, я что-то упустил. Но что?

1 Ответ

0 голосов
/ 23 марта 2020

Ошибка возникает из-за того, что вы используете значение по умолчанию EventHandler, которое ожидает метод с подписью void methodname(object, EventArgs).

Однако ваш метод имеет параметр типа CancelEventArgs.

Вам нужно изменить тип параметра следующим образом:

private void chart_contextMenuStrip1_Opening(object sender, EventArgs e)
{
    ...
}

Если вам нужно использовать CancelEventArgs в вашей функции, вам также нужно использовать обработчик событий, который поддерживает этот тип, например new EventHandler<CancelEventArgs>(yourMethod)

...