簡體   English   中英

C#鼠標右鍵單擊並控制焦點

[英]C# Mouse Right Click and Control Focus

我有一個表單,用戶可以添加控件,當他們右鍵單擊它時會彈出一個上下文菜單,其中包含一個選項,可以顯示他們右鍵單擊的控件的屬性。 我遇到的問題是試圖決定如何找出用戶右鍵點擊的控件,因為它可以是任意數量的控件,然后將控件集中在表單上。 有沒有人有什么好建議? 我應該只使用鼠標事件的(對象發件人)部分嗎?

謝謝。

我的選擇將是使用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;
}

您可以使用以下命令檢查觸發事件的控件的類型:

if (typeof(sender) == _control1.GetType())
{
     // ...
}

或者分配每個控件的Tag屬性,並在事件處理程序中檢查它。 Tag允許更多自定義,但確實有(un)拳擊的性能問題。 然后,檢查類型可能只是一樣糟糕,但我沒有任何支持。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM