第八章 界面设计 第 17 页 共 47 页
If n > iMenucount Or n < 1 Then MsgBox \输入无效\ Exit Sub
End If
For i = n To iMenucount - 1
RunMenu(i).Caption = RunMenu(i + 1).Caption Next i
Unload RunMenu(iMenucount) iMenucount = iMenucount - 1
If iMenucount = 0 Then bar3.Visible = False End Sub
8.2.3 弹出菜单
弹出菜单也称为快捷菜单,上下文菜单
它是显示在窗体上的浮动菜单,操作时使用右键,菜单的出现与鼠标位置有关。设计弹出式菜单与普通菜单类似(都是使用菜单编辑器),将打算在顶部出现的菜单的顶层菜单的可见框(Visible属性)设置为False,而其下的每个菜单项的Visible属性仍要设置为True,这样设计出的菜单就可作为弹出菜单了。
要显示弹出菜单时使用PopupMenu方法(该方法忽略Visible属性的设置)即可。
PopupMenu方法的使用形式:
[对象.]PopupMenu 菜单名, 标志, x, y
标志(flags)参数用于进一步定义弹出菜单的位置和性能,表示弹出的位置和触发的键。x,y可以是按下鼠标按钮时的x,y值(默认),也可以指定一个有效的x,y值。格式中参数,除了菜单名外,其它都是可选的。
标志参数一览表 常数 vbPopupMenuLeftAlign vbPopupMenuCenterAlign vbPopupMenuRightAlign vbPopupMenuLeftButton vbPopupMenuRightButton 值 0 4 8 0 2 说明 位置: X 位置确定弹出菜单的左边界(默认) 弹出菜单以X为中心 X 位置确定弹出菜单的右边界 性能: 只能用鼠标左键触发弹出菜单(缺省值) 能用鼠标左或右键或左右键触发弹出菜单 下面针对文本框中的字体设置设计一个弹出菜单如下。 标题 名称 字体 mnuUp Visual Basic6.0 第 页 共 47 页 17
第八章 界面设计 第 18 页 共 47 页
?字体 ?粗体(&B) ?倾斜(&I) ?退出(&X)
mnuFont mnuBold mnuItlatic mnuExit 弹出菜单示例(在ex8_b51中)
Private Sub mnuFontColor_Click() '改变所选字体的颜色菜单事件 CommonDialog1.ShowColor
RichTextBox1.SelColor = CommonDialog1.Color End Sub
Private Sub mnuFontname_Click() '改变所选字体的名字菜单事件 CommonDialog1.Flags = cdlCFScreenFonts '字体对话框只有屏幕字体 CommonDialog1.ShowFont
RichTextBox1.SelFontName = CommonDialog1.FontName End Sub
Private Sub mnuFontSize_Click() '改变所选字体的的大小菜单事件 CommonDialog1.Flags = cdlCFBoth CommonDialog1.ShowFont
RichTextBox1.SelFontSize = CommonDialog1.FontSize End Sub
Private Sub mnufontBold_Click() '粗细菜单事件 Label2.Visible = True Combo1.Visible = True End Sub
Private Sub Combo1_Click() '选定粗细 RichTextBox1.SelBold = Combo1.Text Combo1.Visible = False Label2.Visible = False End Sub
Private Sub mnufontItlatic_Click() '正斜菜单事件 Label2.Visible = True Combo2.Visible = True End Sub
Private Sub Combo2_Click() '选定正斜 RichTextBox1.SelItalic = Combo2.Text Combo2.Visible = False Label2.Visible = False End Sub
Visual Basic6.0 第 页 共 47 页 18
第八章 界面设计 第 19 页 共 47 页
‘仅在窗体上(非窗体上的控件)按下鼠标按钮激活弹出菜单
'仅在窗体上(非窗体上的控件)按下鼠标按钮激活弹出菜单
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) '请逐一演示
'只有按左键键弹出,菜单的左上角出现在鼠标指针处
'If Button = vbLeftButton Then PopupMenu mnuFont, vbPopupMenuLeftAlign '只有按右键弹出,菜单的上边框中心出现在鼠标指针处
If Button = vbRightButton Then PopupMenu mnuFont, vbPopupMenuCenterAlign '按下右按钮或左按钮弹出菜单
' PopupMenu mnuFont, vbPopupMenuRightButton '按左键弹出(右键也可(?) )
' PopupMenu mnuFont, vbPopupMenuLeftAlign + vbPopupMenuLeftButton '按左键弹出(右键也可(?) ) 'PopupMenu mnuFont
'按下右按钮或左按钮在指定位置处(350)显示弹出菜单
'PopupMenu mnuFont, vbPopupMenuCenterAlign + vbPopupMenuRightButton, 700, 400 End Sub
Private Sub Form_Load()
RichTextBox1.Text = \鸟宿池边树,僧敲月下门。\ & \过桥分野色,移石动云根。\
Label1.Caption = Space(7) & \先选定文本的部分内容\再到窗体上去激活弹出菜单\End Sub
8.3 多重窗体和多文档窗体
多重窗体是指一个应用程序中有多个并列的普通窗体,每个窗体都有自己的界面和程序代码,完成不同的功能。
多文档界面是指一个应用程序(父窗体也称MDI窗体即窗体默认标题为MDIForm的窗体)中包含多个文档(子窗体也称MDIChild窗体)。多文档界面可同时打开多个文档,它简化了文档之间的信息交换。
8.3.1多重窗体的操作 1.添加窗体
添加窗体单击“工程”菜单选“添加窗体”命令,或单击工具栏上的“添加窗体”
图标;选择“现存”选项卡把属于其他工程的窗体添加到当前工程中。
添加“现存”窗体时要注意:
(1)防止多个窗体的Name相同而不能添加;
(2)添加的窗体实际是将其它工程中已有的窗体加入,它在多个工程中共享该窗体;
Visual Basic6.0 第 页 共 47 页 19
第八章 界面设计 第 20 页 共 47 页
可通过“另存为”命令以不同的窗体文件名保存,断开共享。
2. 保存窗体
一个工程中有多个窗体,应分别取不同的文件名保存在磁盘上,VBP工程文件中记录了该工程的所有窗体文件名。
3. 设置启动窗体
在拥有多个窗体的程序中,系统默认从form1窗体文件开始执行,要指定其他窗体为开始窗体,使用“工程/属性” 命令。在启动对象的下拉列表框中选择窗体的Name即可。
4.设置“启动对象”
启动对象既可以是窗体也可以使Sub Main子过程。如果启动对象是Sub Main子过程,则启动程序时不加载任何窗体,以后由该过程视不同情况决定加载哪个窗体。
要注意Main子过程必须放在标准模块中,决不能放在窗体模块中。 5. 有关窗体的语句、方法
(1) Load语句:装入窗体到内存但不显示窗体 形式: Load 窗体名称
(2) Unload语句:从内存删除窗体即卸载窗体。窗体被卸载后,放置在卸载窗体上所
有控件均不可访问了。
形式: Unload 窗体名称
在卸载窗体前会触发该窗体的QueryUnload事件然后才触发窗体的UnLoad,可以通过它的QueryUnload事件的参数cancel设置来阻止不正常的关闭。
格式:Private Sub Form_QueryUnload(Cancel As Integer,UnloadMode As Integer) End Sub
Cancel的值为True(不能关闭。实际上只要是非0值,窗体就不能关闭)和False(只能用Ctrl+Alt+Del关闭)。
值 0 1 2 3 4 常量 vbFormControlMenu vbFormCode vbFormWindows vbAppTeskManager vbFormMDIForm UnloadMode参数值一览表 说明 来自窗体左上角的“控制菜单”中的“关闭”选项 来自Unload语句 来自关闭Windows系统 来自任务管理器(Task Manager) 来自MDI父窗口 [例8_b2] 在myvb\\vb8\\ex8_b2\\ lbc8_b2.vbp 必须单击图片框才能删除窗体
Private Sub Picture1_Click()
Unload Form1 '触发form1的Form_QueryUnload事件,关闭不了form1窗体 End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Visual Basic6.0 第 页 共 47 页 20