右键单击:菜单选项

时间:2011-03-31 21:55:55

标签: vb.net winforms visual-studio

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

用户右键单击我的picturebox对象。好。 当发生这种情况时,我的一些代码会执行并生成一个选项列表。 然后会出现一个菜单,鼠标右键单击该菜单,由这些选项组成。 当用户单击其中一个选项时,将删除菜单并在给定选项index作为参数的情况下运行某些代码。

我的两个问题:

  • 如何确定用户何时右键点击?我可以看到“点击”的事件处理程序,但包括左键点击....
  • 如何创建其中一个菜单?我的意思是,继续并右键点击一些东西。这就是我正在寻找的那种菜单。

3 个答案:

答案 0 :(得分:14)

您需要实现图片框'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

答案 1 :(得分:2)

对于您的第一个问题:您实际上只处理“点击”事件,右键单击没有单独的事件。但是看一下你为事件传递的EventArgs对象:它包含按下哪个按钮的信息(如果鼠标点击有更多信息,它会给你更多信息)。所以你检查if块内的按钮,你就可以了。

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

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

答案 2 :(得分:0)

实际上有一种更简单的方法可以做到这一点。双击您希望能够右键单击的控件。现在转到页面顶部,它应该在组合框中说; “控制”和“点击”点击“点击”组合框并查找:右键单击。使用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