VB程序设计 第八章 界面设计 下载本文

第八章 界面设计 第 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