【问题标题】:Right click: menu options右键单击:菜单选项
【发布时间】:2011-03-31 21:55:54
【问题描述】:

我想在我的应用程序中实现一个功能:

用户右键单击我的图片框对象。好的。 发生这种情况时,我的一些代码会执行并生成一个选项列表。 然后在鼠标右键单击的位置出现一个菜单,由这些选项组成。 当用户点击这些选项之一时,菜单将被删除,并在给定选项索引作为参数的情况下运行一些代码。

我的两个问题:

  • 如何判断用户何时右键单击?我可以看到“单击”的事件处理程序,但包括左键单击......
  • 如何创建这些菜单之一?我的意思是,继续并右键单击某些内容。这就是我要找的那种菜单。

【问题讨论】:

    标签: vb.net winforms visual-studio


    【解决方案1】:

    您需要实现图片框的 MouseUp 事件。检查是否单击了右键,然后使用所需的菜单项创建一个 ContextMenuStrip。例如,您可以使用您添加的项目的 Tag 属性来帮助识别它们,这样您就可以为它们提供一个通用的 Click 事件处理程序。像这样:

    Private Sub PictureBox1_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp
        If e.Button <> Windows.Forms.MouseButtons.Right Then Return
        Dim cms = New ContextMenuStrip
        Dim item1 = cms.Items.Add("foo")
        item1.Tag = 1
        AddHandler item1.Click, AddressOf menuChoice
        Dim item2 = cms.Items.Add("bar")
        item2.Tag = 2
        AddHandler item2.Click, AddressOf menuChoice
        '-- etc
        '..
        cms.Show(PictureBox1, e.Location)
    End Sub
    
    Private Sub menuChoice(ByVal sender As Object, ByVal e As EventArgs)
        Dim item = CType(sender, ToolStripMenuItem)
        Dim selection = CInt(item.Tag)
        '-- etc
    End Sub
    

    【讨论】:

      【解决方案2】:

      对于您的第一个问题:您实际上只处理“单击”事件,右键单击没有单独的事件。但是请查看您为事件传递的 EventArgs 对象:它包含有关按下哪个按钮的信息(如果鼠标单击有任何其他信息,则会为您提供更多信息)。因此,您检查 if 块中的按钮,就可以开始了。

      第二个问题:http://msdn.microsoft.com/en-us/library/system.windows.forms.contextmenustrip.aspx。如果您的菜单是预定义的,只需在 Designer 上查找该组件并从那里准备菜单并从单击处理程序调用其 Show() 方法。如果您需要动态决定菜单条目,链接的文档页面实际上包含一个示例;)

      PS:哎呀,我刚刚注意到 Jon 对这个问题的评论。我给你的答案是针对 Windows 窗体的。如果您使用 WPF,请告诉我们,我会更新详细信息(尽管概念并没有太大不同)。

      【讨论】:

        【解决方案3】:

        实际上有一种更简单的方法可以做到这一点。双击您希望能够右键单击的控件。现在转到页面顶部,它应该在组合框中显示; “控制”和“单击” 单击“单击”组合框并查找:右键单击。使用 ContextMenuStrip 作为右键菜单。

        现在你可以选择你想要的功能了。

        Private Sub PictureBox1_RightClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.RightClick
            ContextMenuStrip1.Show()
            MsgBox("Content Activated.", MsgBoxStyle.Information, "Success!")
        End Sub
        

        希望我能帮上忙。 :)

        Coridex73

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-13
          • 2013-11-03
          • 2016-03-09
          • 2010-11-29
          相关资源
          最近更新 更多