VB程序设计--菜单、对话框及多重窗体.ppt
《VB程序设计--菜单、对话框及多重窗体.ppt》由会员分享,可在线阅读,更多相关《VB程序设计--菜单、对话框及多重窗体.ppt(64页珍藏版)》请在三一文库上搜索。
1、菜单、对话框及多重窗体,VB 程序设计,制作:赖锦德,提出问题,大家在以前就已接触和学习过不少应用程序,比如Office中的文字处理程序Word、表格处理程序Excel等,已经使用过这些程序中强大的菜单功能,它们是如何进行设计的呢? 我们自己能否设计类似的菜单呢?,本章主要内容:,1:菜单 2:对话框 3:多重窗体 4:VB工程结构,两种菜单类型:下拉式菜单、弹出式菜单,1 菜单组成,主菜单(标题)包含若干个菜单项,它放置在菜单的最顶层, 它可以下拉出下一级菜单(子菜单),菜单命令对应一个程序模块,执行命令后子菜单自动消失,子菜单包含子菜单标题和菜单命令,分隔条可对子菜单进行分组,菜单命令对应
2、一个程序模块,执行命令后子菜单自动消失,分隔条可对子菜单进行分组,1:菜单控件 菜单项(主菜单项或子菜单项)也称为菜单控件 菜单项具有其属性、事件、方法 通过“菜单编辑器”完成设计,2:菜单编辑器 使设计菜单栏的窗体成为当前窗体 执行“工具”菜单的“菜单编辑器”命令(或单击标准工具栏的“菜单编辑器”按钮,或从窗体快捷菜单中选择“菜单编辑器”命令),打开“菜单编辑器”窗口,3:菜单编辑器结构 属性区 输入或修改菜单项,设置菜单项属性 编辑区 对输入的菜单项进行编辑操作 菜单列表区 显示菜单项的分级列表,2 菜单编辑器,我们利用菜单编辑器设计每个菜单项,其实每个菜单项都是一个对象,它们都有自己的属
3、性、事件、方法。,名称:Name属性设置菜单控件的名字以便在代码中访问它 设计菜单时必须输入此项!,标题:Caption属性设置菜单项中显示的文字若该属性为连字符(-),则显示为隔离条可定义访问键(在一字母前加&符号),快捷键:顶级菜单不能使用快捷键!,索引:若将菜单控件定义为数组,则Index属性确定数组控件的位置,Checked,Enabled,Visible,当具有菜单的窗体包含另一个具有菜单的对象时,该属性协调二者的位置 0-None 1-Left 2-Middle 3-Right,决定菜单项是否显示缺省值True,设置菜单项的左端是否带复选标记缺省值False,决定菜单项是否响应事件
4、缺省值True,完成上述设计,单击确定按钮,即可看到菜单结构,要实现菜单功能,需要编写菜单项的事件代码,【例1 】设计一个具有算术运算(+、-、/ )及清除功能的菜单。从键盘上输入两个数,利用菜单命令求出它们和、差、积或商,并显示出来。,菜 单 设 计,编写程序代码,菜单的事件过程以菜单项区分,可以把每个菜单项看成是一个控件。菜单设计完成后,只要单击某个菜单项,即可定义该菜单项的事件过程。,【例2 】设计菜单界面如下图所示,下拉菜单中的子菜单项用于对文本框设置字体、字号、文字颜色和效果。其中,效果菜单下的各菜单项具有复选功能,设运行初始时各项前面没有符号,与文本框初始状态一致,Text1,菜单
5、编辑器设置如下:,菜 单 列 表 区,续上表:,菜 单 列 表 区,菜 单 列 表 区,菜 单 列 表 区,菜单项事件代码设计如下:,“字体”菜单下的菜单项设计成一个控件数组AA1,共享以下事件过程: Private Sub AA1_Click(Index As Integer) Text1.Font = AA1(Index).Caption End Sub,“字号”菜单下的菜单项设计成一个控件数组BB1,共享以下事件过程: Private Sub BB1_Click(Index As Integer) Text1.FontSize = Val(BB1(Index).Caption) End
6、Sub,“颜色”菜单下的各菜单项为独立的菜单控件,因此应分 别在其单击事件过程中编写代码,各事件过程如下: Private Sub CC1_Click() Text1.ForeColor = vbRed End Sub Private Sub CC2_Click() Text1.ForeColor = vbGreen End Sub Private Sub CC3_Click() Text1.ForeColor = vbBlue End Sub,“效果”菜单下的各菜单项具有复选功能,每次单击时切换成另一种状态。因此要判断当前菜单项的Checked属性,各事件过程如下:,Private Sub
7、DD1_Click() 删除线 If DD1.Checked = True Then Text1.FontStrikethru = False DD1.Checked = False Else Text1.FontStrikethru = True DD1.Checked = True End If End Sub,Private Sub DD2_Click() 下划线 If DD2.Checked = True Then Text1.FontUnderline = False DD2.Checked = False Else Text1.FontUnderline = True DD2.Ch
8、ecked = True End If End Sub,Private Sub DD3_Click() 粗体 If DD3.Checked = True Then Text1.FontBold = False DD3.Checked = False Else Text1.FontBold = True DD3.Checked = True End If End Sub Private Sub DD4_Click() 斜体 If DD4.Checked = True Then Text1.FontItalic = False DD4.Checked = False Else Text1.Font
9、Italic = True DD4.Checked = True End If End Sub,2:方法PopupMenu的格式: .PopupMenu ,flags,x,y,boldcommand flags 指定菜单的位置和行为,祥见P171表10-2、10-3 x 菜单的x坐标,缺省则为鼠标坐标 y 菜单的y坐标,缺省则为鼠标坐标 boldcommand 指定要显示为黑体的菜单项控件名称,二、弹出式菜单 独立于菜单栏直接显示在窗体上,也称作上下文菜单、快捷菜单、右键菜单,1:弹出式菜单的设计 在菜单编辑器中按下拉式菜单的设计方法,并将其顶级菜单设置为不可见 在对象的MouseDown事件
10、过程中编写代码,用以下的PopupMenu方法显示弹出式菜单,MouseDown事件: Sub Form_MouseDown(Button As Integer, Shift As Integer,X As Single, Y As Single) (发生在窗体上的事件过程),(1) Button参数,B0=1:按下左键; Button为1(001B) B1=1:按下右键; Button为2(010B) B2=1:按下中键。 Button为4(100B),(2) Shift参数,B2=1按下Alt键; B1=1按下Ctrl键;B0=1按下Shift键,返回一个整数,在 Button 参数指定的
11、按钮被按下或者被释放的情况下,该整数相应于 SHIFT,CTRL,和 ALT 键的状态。某键被按下使得一个二进制位被设置。shift 参数是具有相应于 SHIFT 键(位 0),CTRL 键(位 1),以及 ALT 键(位 2)最少二进制位的一个位字段。这些位的值分别等于 1,2,和 4。,B2=1按下Alt键; B1=1按下Ctrl键;B0=1按下Shift键,(2) Shift参数,【例3 】在例2的基础上设计窗体和文本框的弹出式菜单,如下图所示:,菜单编辑器设置如下:,文本框的MouseDown事件代码设计如下: Private Sub Text1_MouseDown (Button A
12、s Integer, Shift As Integer, X As Single, Y As Single) If Button = 2 Then PopupMenu EE, 0 Or 0 End If End Sub,窗体的MouseDown事件代码设计如下: Private Sub Form_MouseDown (Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 2 Then PopupMenu FF,8 Or 0, , ,FF3 End If End Sub,菜单项事件代码设计如下:,保存
13、窗体的初始颜色: Dim Fcolor As Long Private Sub Form_Load() Fcolor = Form1.BackColor &H8000000F默认色 End Sub,文本框快捷菜单: Private Sub EE1_Click() Text1.FontSize = Text1.FontSize + 1 增加1磅 End Sub Private Sub EE2_Click() Text1.FontSize = Text1.FontSize 1 减少1磅 End Sub Private Sub EE3_Click() 锁定 If EE3.Caption = “锁定“
14、 Then EE3.Caption = “取消锁定“ : Text1.Locked = True Else EE3.Caption = “锁定“ : Text1.Locked = False End If End Sub,窗体快捷菜单: Private Sub FF1_Click() Form1.BackColor = vbRed 红色背景 End Sub Private Sub FF2_Click() Form1.BackColor = vbGreen 绿色背景 End Sub Private Sub FF3_Click() Form1.BackColor = Fcolor 默认背景 End
15、 Sub,常见错误及难点分析,1.窗体菜单名、顶层菜单与菜单项的区别 通常出现在菜单栏上的菜单对象称为菜单名,菜单名以下拉列表形式包含的内容为菜单项。菜单项可以包括菜单命令、分隔条和子菜单标题。当菜单名没有菜单项时,为“顶层菜单”,可直接对应一个应用程序。 菜单名、顶层菜单不能定义快捷菜单, 而菜单项 可以有快捷键。 当菜单包含有热键字母(菜单标题中“&”后的字母)时窗体,按Alt+热键字母可选择窗体顶部菜单栏中的菜单项,当子菜单打开时,按热键字母选择子菜单中的。如果子菜单没有打开时,按热键字母无法选择其中的菜单项。 尽管所有的菜单项都能响应Click事件,但是菜单栏中的菜单名通常不需要编写事
16、件过程。,区别,常见错误及难点分析,2 使用Load语旬加载窗体,窗体不显示 Load语句将窗体装入内存并设置窗体的Visible属性为False(无论在设计时如何设置Visible属性),此时可以引用窗体中的控件及各种属性。为了使窗体可见,在用Load语句后,再将窗体的Visible属性设置为True,或使用Show方法加载窗体。,3在因体加载过程中使用 SetFocus方法出现“无效的过程调用或参数”错误 焦点只能移到可视的窗体或控件上。在窗体的Load事件完成前窗体或窗体上的控件是不可视的,所以不能在 Form_ Load事件中把焦点移到正在加载的窗体上,也不能在Load事件内使用Set
17、Focus方法将焦点移至窗体上的控件。此外,也不能把焦点移到Enabled或Vsible属性被设置为False的窗体或控件。如果已在设计时将Enabled或Visible属性设置为False,必须在使用SetFocus方法前将Enabled或Visible属性设置为True。,在首次用Load语句将窗体(假定该窗体在内存中还没有创建)调人内存之时依次发生Initialize和Load事件。Initialize是在窗体创建时发生的事件。在窗体的整个生命周期中, Initialize 事件只触发一次。用户可以将一个窗体装入内存或从内存中删除很多次,但窗体的建立只有一次。也就是说,在用Load语句将
18、窗体装入内存时会触发Load事件,但并不一定触发Initialize事件 窗体的Activate事件仅当窗体成为活动窗口时才发生。,在窗体从内存中卸载时依次发生 QueryUnload和 Unload事件。QueryUnload事件可提供造成窗体卸载的原因(单击“关闭”按钮/程序中执行Unload语句/在应用程序中关闭/在Windows中的关闭)。如果在QueryUnLoad事件中把QueryUnload的参数Cancel设置为True,就会忽略Unload语句,从而不卸载窗体。所以QueryUnload提供了取消关闭窗体的机会,同时也允许在需要时从代码中关闭窗体。,使用End语句来结束程序,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB 程序设计 菜单 对话框 多重 窗体
链接地址:https://www.31doc.com/p-3486162.html