Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 右键单击:菜单选项_Vb.net_Winforms_Visual Studio - Fatal编程技术网

Vb.net 右键单击:菜单选项

Vb.net 右键单击:菜单选项,vb.net,winforms,visual-studio,Vb.net,Winforms,Visual Studio,我想在我的应用程序中实现一个功能: 用户右键单击我的picturebox对象。好。 当这种情况发生时,我的一些代码将执行并生成一个选项列表。 然后出现一个菜单,其中鼠标右键单击,由这些选项组成。 当用户单击其中一个选项时,菜单将被删除,并在给定选项索引作为参数的情况下运行一些代码 我的两个问题: 我如何判断用户何时右键单击?我可以看到“单击”的事件处理程序,但其中包括左键单击 如何创建这些菜单之一?我的意思是,继续,右击某个东西。这就是我想要的菜单 对于您的第一个问题:您实际上只处理“单击”事

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

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

我的两个问题:

  • 我如何判断用户何时右键单击?我可以看到“单击”的事件处理程序,但其中包括左键单击
  • 如何创建这些菜单之一?我的意思是,继续,右击某个东西。这就是我想要的菜单

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

关于你的第二个问题:。如果您的菜单是预定义的,只需在设计器中查找该组件并从中准备菜单,然后从单击处理程序调用其
Show()
方法。如果您需要即时决定菜单项,链接的文档页面实际上包含了一个示例;)


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

您需要实现picturebox的鼠标点击事件。检查是否单击了右按钮,然后创建包含所需菜单项的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
Private Sub PictureBox1\u MouseUp(ByVal sender作为System.Object,ByVal e作为System.Windows.Forms.MouseEventArgs)处理PictureBox1.MouseUp
如果e.Button Windows.Forms.MouseButtons.Right,则返回
Dim cms=新的上下文列表
Dim item1=cms.Items.Add(“foo”)
item1.Tag=1
AddHandler项1。单击,菜单项的地址
尺寸项目2=cms.Items.Add(“条”)
item2.Tag=2
AddHandler项2.单击,菜单项的地址
”“等等
'..
cms.Show(图1,e.位置)
端接头
私有子菜单项(ByVal发送方作为对象,ByVal e作为事件参数)
尺寸项目=CType(发送方、ToolStripMenuItem)
尺寸选择=CInt(item.Tag)
”“等等
端接头

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