vb的PopupMenu功能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vb的PopupMenu功能相关的知识,希望对你有一定的参考价值。

(我在vb菜单栏设置了一个标题change的菜单
用form背景的movedown设置判断右键PopupMenu弹出change菜单)
现在想在一个text的空白处右键也可以PopupMenu弹出change菜单,可是弹出的是原来的复制黏贴还是在左上角的,请问为什么?楼主初学VB想让右击text跟上面一样效果
就跟图三那个效果移植到text右键空白处,有点急,谢谢大家

If Button = 2 Then
Text1.Enabled = False
Text1.Enabled = True
PopupMenu change, 64

End If追问

text设enable为假不可编辑自身文本

请问为什么先假后真就可以响应弹出菜单
那原来右键的功能是怎么被跳过的?

追答

标准的方法是要用到API的回调函数去屏蔽text控件原有的右键菜单,代码比较复杂。而现在用的这个是个取巧的、非常规的做法。把Text1.Enabled设为False可关闭原装的右键菜单,再设为True就可响应用户的菜单,至于深层的原理就不要去深究了,都说了这是个非常规的用法了,管用就行,就像现实生活中有些事正常途径无法解决时就找一些偏门的、甚至见不得光的方法去处理一样,别深究、别好奇,好奇害死猫,嘿嘿……

参考技术A PopupMenu方法用来显示弹出菜单,语法格式为:
object.PopupMenu menuname,flags,x, y,boldcommand
其中:
Object(对象)——窗体名。
Menuname(菜单名)——指在菜单编辑器中定义的主菜单项名。
X、Y——弹出式菜单在窗体上的显示位置的X、Y坐标(与Flags参数配合使用)。
Boldcommand——指定弹出式菜中的弹出式菜单控件的名字,用以显示为黑体正文标题。
Flags——该参数是一个数值或符号常量,指定弹出式菜单的位置和行为,其取值分为两组,一组用来指定菜单位置,另一组用来定义特殊的菜单行为,如下表:
指定菜单位置

定位常量 值 作用
VbPopupMenuLeftAlign 0 X坐标指定弹出式菜单的左边界位置
VbPopupMenuCenterAlign 4 X坐标指定弹出式菜单的中间位置
VbPopupMenuRightAlign 8 X坐标指定弹出式菜单的右边界位置
定义菜单行为

定位常量 值 作用
VbPopupMenuLeftButton 0 通过单击鼠标左键选择菜单命令
VbPopupMenuRightButton 8 通过单击鼠标右键选择菜单命令
说明:
PopupMenu方法的6个参数中,除“菜单名”外,其余参数都是可选的。当省略了“对象”时,弹出式菜单只能在当前窗体中显示。如果需要在其它窗体中显示弹出菜单,则必须加上窗体名。
Flags的两组参数可以单独使用,也可以联合使用。当联合使用时,每组中取一个值,两个值相加;如果使用符号常量,则两个值用Or连接。
X、Y分别用来指定弹出式菜单显示位置的横、纵坐标,如果省略,则弹出菜单在鼠标光标的当前位置显示。
弹出式菜单的“位置”由X、Y、Flags参数共同指定。如果省略这几个参数,则在单击鼠标右键弹出菜单时,鼠标光标所在位置为弹出式菜单左上角的坐标。在默认情况下,以窗体的左上角为坐标原点。如果只省略Flags参数,不省略X、Y参数,则X、Y为弹出式菜单左上角的坐标;如果同时使用X、Y及Flags参数,则弹出菜单的位置分为一下几种情况:
Flags=0 X、Y为弹出式菜单左上角的坐标
Flags=4 X、Y为弹出式菜单顶边中间的坐标
Flags=8 X、Y为弹出式菜单右上角的坐标
为了显示弹出式菜单,通常把PopupMenu方法放在MouseDown事件中,该事件响应所有的鼠标单击操作。按照惯例,一般通过单击鼠标右键显示弹出菜单,这可以用Button参数来实现。对于两个键的鼠标来说,左键的Button参数值为1,右键的Button参数值为2。因此可以强制使用右键来响应MouseDown事件而显示弹出菜单:
If Button=2 Then PopupMenu 菜单名

DevExpress控件之popupMenu

一、首次创建

1、可直接从工具栏拉一个PopupMenu出来,

2、右键Customize,Yes(提示是否自动创建BarManager,并为popupmenu绑定这个BarManager):

 

3、编辑PopupMenu菜单项,

4、把PopupMenu的属性的Manager设置为BarManager,

5、设置需要弹出右键菜单的控件的MouseUP事件

1
2
3
4
if (e.Button == MouseButtons.Right)
{
    popupMenu.ShowPopup(Control.MousePosition);
}

二、同一窗体下的第二个PopupMenu

1、新建个PopupMenu,

2、编辑其Customize菜单项,

3、然后在之前的BarManager上右键进入Designer,

4、设置菜单项属性和事件

5、设置需要弹出右键菜单的控件的MouseUP事件

1
2
3
4
if (e.Button == MouseButtons.Right)
{
    popupMenu.ShowPopup(Control.MousePosition);
}

 

三、事件

右键barManager1控件,双击ItemClick事件

private void barManager1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
     if (e.Item.Caption == "点击")
     { }
}

 

参考:

1 DevExpress组件之——PopupMenu组件

以上是关于vb的PopupMenu功能的主要内容,如果未能解决你的问题,请参考以下文章

Android 仿微信长按列表弹出PopupMenu菜单栏

matlab GUI popupmenu怎么用?

Android popupMenu

DevExpress控件之popupMenu

matlab GUI 中popupmenu控件的问题

PopupMenu的弹出坐标设置