Как определить, какой элемент управления был нажат, и появился contextMenuStrp? - PullRequest
0 голосов
/ 23 февраля 2012

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

        private void copyNotesToClipboardStripMenu_Click(object sender, EventArgs e)
        {
            ListBox cntrl = conMenuNotes.SourceControl as ListBox;
            //cntrl does not contain info about which ListBox was clicked :((

            //check which ListBox was clicked
            if (/*oneListBox*/)
            {
                 //do something                    
            }
            if(/*anotherLiskBox*/)
            {    
                //do something
            }              
        }

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

Я вижу, что cntrl.Label равно null

Что я делаю не так? Посоветуйте мне, как решить эту двусмысленность. Спасибо!

Ответы [ 2 ]

1 голос
/ 23 февраля 2012

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

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

Также не делайте 'не забудьте установить глобальный на null после того, как вы закончите с ним, и убедитесь, что вы используете lock при его использовании.

0 голосов
/ 27 февраля 2012

Я нашел результат, который отлично работает для меня

        private void copyNotesToClipboardStripMenu_Click(object sender, EventArgs e)
        {
            ToolStripMenuItem menuItem = sender as ToolStripMenuItem;
            if (menuItem != null)
            {
                ContextMenuStrip calendarMenu = menuItem.Owner as ContextMenuStrip;
                if (calendarMenu != null)
                {
                    Control controlSelected = calendarMenu.SourceControl;
                }
            }
        }

Свойство Имя из controlSelected объект содержит имя элемента управления, который активировал контекстное меню,

...