[英]How do you get the control that was clicked to open a ContextMenuStrip?
我正在使用ContextMenuStrip
進行多個控件,我正在嘗試找出獲得實際點擊的控件以打開上下文菜單的最佳方法。 發送者只提供ToolStripMenuItem
引用,它具有引用ContextMenuStrip
的Owner屬性,但我無法弄清楚如何判斷單擊來自哪個控件。 必須有一個簡單的方法來檢查這個,對嗎? 我在ToolStripMenuItem
的click事件中檢查它。
Friend WithEvents mnuWebCopy As System.Windows.Forms.ToolStripMenuItem
...
Private Sub mnuWebCopy_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles mnuWebCopy.Click
我發現了一篇關於此的類似帖子 ,但提到使用SourceControl
屬性,我在這里沒有看到。
我正在使用Visual Studio 2008,VB.Net winforms。
Private Sub mnuWebCopy_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles mnuWebCopy.Click
Dim myItem As ToolStripMenuItem = CType(sender, ToolStripMenuItem)
Dim cms As ContextMenuStrip = CType(myItem.Owner, ContextMenuStrip)
MessageBox.Show(cms.SourceControl.Name)
End Sub
您的發件人是ToolStripMenuItem - 投了它。
它的擁有者是一個ContextMenuStrip - 得到它。
SourceControl是ContextMenuStrip上的屬性,它引用顯示ContextMenuStrip的最后一個控件。
Private Sub kdgToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles kdgToolStripMenuItem.Click
Dim sms = (sender.GetCurrentParent()).SourceControl.name
MsgBox(sms)
End Sub
'///快點
Private Sub cmsRightClick_Click(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles cmsRightClick.MouseClick
Dim s As String = CType(sender, ContextMenuStrip).GetItemAt(CType(sender, ContextMenuStrip).DisplayRectangle.X, _
CType(sender, ContextMenuStrip).DisplayRectangle.Y + e.Y).Text.Trim()
MsgBox(s)
Select Case s
Case Is = "Select Summary Total"
Dim x = 0
Case Is = "Select Collections"
Dim x = 1
Case Is = "UnSelect"
Dim x = 2
Case Is = "Reconcile"
Dim x = 3
Case Is = "Undo Reconciliation"
Dim x = 4
End Select
End Sub
在VB.NET 2013上,這項工作非常好:
Dim cms As ContextMenuStrip = CType(sender, ContextMenuStrip)
MessageBox.Show(cms.SourceControl.Name)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.