Мой выбор будет использовать object Sender
, самое прямое. Хотя вам нужно выполнить приведение, если вы хотите, чтобы операции выполнялись для определенного типа элемента управления.
UPDATE:
Если у вас есть хорошее соглашение об именах или, по крайней мере, для тех элементов управления форм, которые требуют операций ContextMenu, вот как вы можете это сделать:
Прикрепление события щелчка мыши к конкретным элементам управления, или вы можете написать что-то, что нужно присоединить ко всем элементам управления, итерацией по коллекции Controls
формы.
label1.MouseClick += new MouseEventHandler(control_RightMouseClick);
label2.MouseClick += new MouseEventHandler(control_RightMouseClick);
label3.MouseClick += new MouseEventHandler(control_RightMouseClick);
Затем выполнить различные операции или показать другое контекстное меню для разных элементов управления
void control_RightMouseClick(object sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Right)
{
return;
}
if (sender.GetType().IsSubclassOf(typeof(Control)))
{
Control formControl = (Control)sender;
switch (formControl.Name)
{
case "label_1":
//do something
contextMenuStrip1.Show(formControl, e.Location);
break;
case "label_2":
//do something else
contextMenuStrip2.Show(formControl, e.Location);
break;
case "label_3":
//do something else
contextMenuStrip3.Show(formControl, e.Location);
break;
case "panel_1":
//do something else
break;
default:
//do something else or return or show default context menu
contextMenuStrip_default.Show(formControl, e.Location);
break;
}
}
return;
}