Nat*_*han 3 c# controls focus contextmenu winforms
我有一个表单,用户可以添加控件,当他们右键单击它时会弹出一个上下文菜单,其中包含一个选项,可以显示他们右键单击的控件的属性.我遇到的问题是试图决定如何找出用户右键点击的控件,因为它可以是任意数量的控件,然后将控件集中在表单上.有没有人有任何好的建议?我应该只使用鼠标事件的(对象发件人)部分吗?
谢谢.
我的选择将是object Sender最直接的.如果您想要对特定控件类型进行操作,则需要进行转换.
更新:
如果你有一个很好的命名约定,或者至少对那些需要ContextMenu操作的表单控件,这里有你如何做到这一点:
将鼠标单击事件附加到特定控件,或者您可以通过迭代表单的Controls集合来编写要附加到所有控件的内容.
label1.MouseClick += new MouseEventHandler(control_RightMouseClick);
label2.MouseClick += new MouseEventHandler(control_RightMouseClick);
label3.MouseClick += new MouseEventHandler(control_RightMouseClick);
Run Code Online (Sandbox Code Playgroud)
然后执行不同的操作或显示不同控件的不同上下文菜单
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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18655 次 |
| 最近记录: |