代码之家  ›  专栏  ›  技术社区  ›  AndyPerfect

获取ToolStripDropDownItem的最高所有者

  •  0
  • AndyPerfect  · 技术社区  · 14 年前

    我目前正在做一个项目,在这个项目中,用户可以右键单击一个按钮,它将显示一个ContextMenuStrip。我已经能够从该条带中准确地找到所有者,并操作单击的按钮,如下所示:

    Dim myItem As ToolStripMenuItem = CType(sender, ToolStripMenuItem)
    Dim cms As ContextMenuStrip = CType(myItem.Owner, ContextMenuStrip)
    
    Dim buttonPressed As DataButton = DirectCast(cms.SourceControl, DataButton)
    

    但现在对于棘手的部分。在这个ContextMenuStrip中,我有一个下拉菜单,其中包含多个项目。我想你可以像上面那样沿着梯子往上爬。

     ToolStripDrowpDownItem > ToolStripDropDownMenu > ToolStripMenuItem > ContextMenuStrip
    

    不幸的是,当我试图从这个菜单中获取sourcecontrol时,它什么也没有返回。关于如何从这个工具条菜单项中获得按下的按钮有什么想法吗?我当前的代码如下(其中sourcecontrol为Nothing)

    Dim myItem As ToolStripDropDownItem = CType(sender, ToolStripDropDownItem)
    Dim dropDown As ToolStripDropDownMenu = CType(myItem.Owner, ToolStripDropDownMenu)
    Dim menuItem As ToolStripMenuItem = CType(dropDown.OwnerItem, ToolStripMenuItem)
    Dim cms As ContextMenuStrip = CType(menuItem.Owner, ContextMenuStrip)
    
    Dim buttonPressed As DataButton = DirectCast(cms.SourceControl, DataButton)
    

    关于如何去做我在第一种方法中所做的事情,有什么想法吗,但只是从梯子的下面往上爬?

    1 回复  |  直到 14 年前
        1
  •  2
  •   Jay    14 年前

    我建议您不要试图后退查看按钮被按下并采取相应的行动,而是在创建按钮时指定按钮的行为。

    Dim button As New ToolStripMenuItem("do something")
    AddHandler button.Click, AddressOf DoSomething
    

    艾斯

    Public Sub DoSomething(ByVal sender as Object, ByVal e as System.EventArgs)
        'do something
    End Sub
    

    然后你就不用担心它了——当它被点击时,它就会完成它的工作。