C# 鼠标右键单击和控制焦点

标签 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);

然后为不同的控件执行不同的操作或显示不同的上下文菜单

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;
}

关于C# 鼠标右键单击和控制焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1656377/

相关文章:

c# - 将整个工作簿另存为 PDF Excel 2010 (C#)

android - 如何在 Android 中创建自定义控件?

ASP.NET:滚动到控件

java - JTextArea 转移焦点

c# - 在内存中使用 Entity FrameWork Core 和 Sqlite 我得到 "no such table: ControlGroup"错误

C#通过windows api从文件中获取缩略图

wpf - 有没有好的 WPF 控件库?

javascript - 突出显示快捷键上的文本输入

html - 当标签旁边的输入获得焦点时,如何更改标签的颜色?

c# - 绑定(bind)到 MvxSpinner SelectedItem 属性不起作用