2011-03-31 177 views
3

我想在我的应用程序中实现一个功能:右键单击菜单选项

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

我的两个问题:

  • 我怎么能告诉用户右键点击的时候?我可以看到“点击”事件处理程序,但包括左键点击......
  • 如何创建其中一个菜单?我的意思是,继续并右键点击一下。这是我正在寻找的菜单。

回答

14

您需要实现picturebox'MouseUp事件。检查是否单击了右键,然后用所需的菜单项创建ContextMenuStrip。您可以使用添加的项目的标签属性来帮助识别它们,以便为它们提供常见的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 
+0

谢谢,这是伟大的。 – Voldemort 2011-04-01 23:08:38

2

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

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

PS:oops,我只注意到Jon对这个问题的评论。我给你的答案是Windows Forms。如果你在WPF上,让我们知道,我会更新细节(虽然概念不太相同)。

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