[英]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.