Как определить, какой элемент управления активировал контекстное меню? - PullRequest
1 голос
/ 10 февраля 2011

В приложении winforms C # я назначил одно и то же контекстное меню четырем элементам управления PictureBox.

Я бы хотел определить, какое из них использовалось для активации контекстного меню.

Я сделал следующее в событии Click для данного пункта меню, который кажется неудобным:

MenuItem_Click(object sender, EventArgs e)
{
    PictureBox Origin = (PictureBox)sender;
    switch (Origin.Name)
    {
        case "pbOne":
            // do something with #1
            break;
        case "pbTwo":
            // do something with #2
            break;
    }
}

Работа с именем элемента управления - это неловкая часть.

Можете ли вы предложить лучший способ?

Изменить:

Приведение sender к PictureBox не работает, так как я забыл, что пункт меню будет отправителем, а не PictureBox. Так что мне придется дальше возвращаться.

Ответы [ 2 ]

3 голосов
/ 10 февраля 2011

Просто используйте SourceControl свойство:

var pictureBox = contextMenuStrip1.SourceControl as PictureBox;
1 голос
/ 10 февраля 2011

Не уверен, как ты сделал эту работу. sender - это пункт меню, а не поле изображения.Если это действительно работает, то у вас уже есть ссылка на графическое окно, с которым вы хотите повозиться.Это Происхождение.Нет необходимости в операторе switch.

Еще один способ, который работает, - это использование события открытия:

    private PictureBox currentBox;

    private void allContextMenuStrips_Opening(object sender, CancelEventArgs e) {
        currentBox = (sender as ContextMenuStrip).SourceControl as PictureBox;
    }

. Теперь вы можете использовать currentBox в любом менюэлемент Нажмите обработчики событий.Это работает, потому что одновременно может быть открыто только одно меню.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...