五、弹出式菜单的设计
功能:用于对窗体中某个特定区域有关的操作或选项进行控制。与下拉式菜单不同,它不需要在窗口的顶部下拉打开,可在窗口的任意位置打开。
设计分为两步:首先用菜单编辑器建立菜单,这一步与前面介绍的基本相同,唯一的区别是,必须把菜单名(即主菜单项)的可见属性设置为False(子菜单项不要设置为False);第二步用PopupMenu方法弹出显示。
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 菜单名
下面举例说明建立弹出式菜单的一般过程。
例6 建立一个弹出式菜单,用来改变文本框中字体的属性。
步骤如下:
打开菜单编辑器,设置各菜单属性。
标题 |
名称 |
内缩符号 |
可见性 |
字体格式化 粗体 斜体 下划线 20 隶书 退出 |
popFormat popBold popItalic popUnder font20 fontLs Quit |
无 1 1 1 1 1 1 |
False True True True True True True |

编写窗体的MouseDown事件过程。
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then '判断所按下的是否鼠标右键,如果是,则用PopupMenu方法弹出菜单。 PopupMenu popFormat 'PopupMenu方法省略了对象参数,指的是当前窗体。 End If
End Sub
鼠标事件:
鼠标事件除了单击(Click)、双击(DbClick)事件外,还有识别按下或放开某个鼠标键而触发的事件,它们是压下鼠标事件(MouseDown)、松开鼠标事件(MouseUp)、移动鼠标光标事件(MouseMove)。3个鼠标事件具有相同的参数,含义分别为: ◆Button——被按下的鼠标键,可取3个值1、2、4,分别表示鼠标的左键、右键和中间键(如果没有或不可用,可省略)。 ◆X、Y——鼠标光标当前的位置,不需要给出具体的数值,它随鼠标光标在窗体上的移动而变化。 ◆Shift——表示 Shift、Ctrl和Alt的状态。它有8个值(0—7),分别作用如下: 0——未按转换键 1——按下Shift键 2——按下Ctrl键3 3——同时按下Shift和Ctrl键 4——按下Alt键 5——按下Alt键和Shift键 6——按下Alt键和Ctrl键 7——同时按下Shift、Ctrl和Alt键 |
在窗体上画一个文本框,并编写如下窗体事件过程。
Private Sub Form_Load() Text1.Text = "可视化高级程序语言" End Sub
对各个子菜单项编写事件过程。
因为主菜单不可见,所以不能直接下拉主菜单而单击子菜单进入代码窗口,必须先进入代码窗口(按F7键或双击窗体或执行“视图”菜单下的“代码窗口”命令),然后分别从“对象名称”框和“事件名称”框中选择对应项,然后分别编写代码。
Private Sub popBold_Click() Text1.FontBold = True End Sub
Private Sub popItalic_Click() Text1.FontItalic = True End Sub
Private Sub popUnder_Click() Text1.FontUnderline = True End Sub
Private Sub fontLs_Click() Text1.FontName = "隶书" End Sub
Private Sub Quit_Click() End End Sub
运行结果:

[程序演示] [程序下载]
关于字形:
VB中可以输出各种英文和中文字形,并可通过设置字形的属性来改变它们。这些属性主要有: ◆字体类型 格式:[窗体.][控件.]│Printer.FontName[="字体类型" ◆字体大小 格式:FontSize[=点数] ◆粗体字 格式:FontBold[=Boolean] ◆斜体字 格式:FontItalic[=Boolean] ◆加下划线 格式:FontUnderline[=Boolean] ◆加删除线 格式:FontStrikethru[=Boolean] ◆重叠显示——当以图形或文本作为背景显示新的信息时,有时需要保留原来的背景,使新显示的信息与背景重叠(只适用于窗体和图片框)。 格式:FontTransParent[=Boolean] |
|