500 likes | 655 Views
第五章 窗体与菜单. 本章主要内容: 1 、 用户界面类型 2 、 多窗体程序的设计与应用 3 、 菜单的设计与应用 4 、 工具栏和状态栏设计. 5.1 用户界面类型. 窗体型用户界面 菜单型用户界面 带工具栏 、状态栏的菜单型用户界面. 5.2 多窗体程序的设计与应用. 1. 添加窗体 “ 工程→添加窗体 ” 2. 显示或隐藏窗体 显示指定窗体 Object.Show [Style] Object -窗体名称 Style -显示模式 (0 、 1)
E N D
第五章 窗体与菜单 • 本章主要内容: 1、用户界面类型 2、多窗体程序的设计与应用 3、菜单的设计与应用 4、工具栏和状态栏设计 制作:黄传禄
5.1 用户界面类型 • 窗体型用户界面 • 菜单型用户界面 • 带工具栏、状态栏的菜单型用户界面 制作:黄传禄
5.2 多窗体程序的设计与应用 1. 添加窗体 “工程→添加窗体” 2. 显示或隐藏窗体 • 显示指定窗体 Object.Show [Style] Object-窗体名称 Style-显示模式(0、1) 0 (非模态型)—鼠标只在此窗体内起作用,不能到其它窗口内操作 1(模态型)—不用关闭该窗体就可以对其它窗口进行操作 • 隐藏指定窗体 Object.Hide 制作:黄传禄
3. 设置启动窗体 • 默认第一个窗体(Form1)为启动窗体 • 改变启动窗体:“工程→工程属性” 制作:黄传禄
点击后可打开相应的窗体 多窗体程序的设计与应用实例 例:试题库管理程序设计 制作:黄传禄
多窗体程序的设计与应用实例 (1) 创建用户登录窗体Frmdl ① 新建工程:窗体保存为Frmdl.frm,工程保存为ctk.vbp。 ② 窗体设计: • 下面4个按钮为一控件数组Cmdml(0)~Cmdml(3) • 除“退出”按钮外,其它三个按钮的Enabled属性设为False • 密码文本框Txtcode的PasswordChar属性设为“*” • 底部提示标签Lblsm的Caption属性设为空 制作:黄传禄
③程序设计: Dim cs As Integer 'cs记录出错次数 Private Sub Cmdml_Click(Index As Integer) Select Case Index Case 0: '单击"题库管理"按钮 Frmsele.Show 1 Case 1: '单击"自动选题"按钮 Frmxt.Show 1 Case 2: '单击"制作考盘"按钮 Frmcopy.Show 1 Case 3: '单击"退出"按钮 End End Select End Sub 制作:黄传禄
Private Sub Cmgqd_Click() '单击“确定”按钮 If cs < 3 Then If UCase(TxtName.Text) <> "TEACHER" Then Lblsm.Caption = "用户名错误,请重新输入!" cs = cs + 1: TxtName.SetFocus ElseIf (Txtcode.Text) <> "kaoshi" Then Lblsm.Caption = "密码错误,请重新输入!" cs = cs + 1 : Txtcode.SetFocus Else '用户名和密码均正确的情况 Lblsm.Caption = "" : Cmdml(0).Enabled = True Cmdml(1).Enabled = True : Cmdml(2).Enabled = True End If Else Lblsm.Caption = "已连错三次,请退出!" Cmdml(3).SetFocus End If End Sub 制作:黄传禄
(2) 添加题库管理窗体Frmsele ① “工程→添加窗体”,新建一个窗体,保存为Frmsele.frm。 ② 在该窗体中添加一个命令按钮, ③编写Click事件响应代码: Private Sub Cmd_exit_Click() Unload Me End Sub (3) 仿上,添加窗体Frmxz.frm (4) 仿上,添加窗体Frmcopy.frm 制作:黄传禄
5.3 MDI窗体设计 1.多文档界面 多文档界面-是Windows应用程序的典型结构,是在一个应用程序中能够同时处理两个或多个窗体的界面形式 2.父窗体和子窗体 子窗体-就是MDIChild属性设置为True的普通窗体 在程序运行时,子窗体显示在MDI父窗体之内 当子窗体最小化时,它的图标显示在MDI父窗体的工作空间的最底端,而不是在任务栏中 制作:黄传禄
3.创建MDI窗体 (1)创建MDI窗体 从"工程"菜单中选取"添加MDI窗体" 注意: 一个应用程序只能有一个MDI窗体 (2)创建MDI子窗体 要创建MDI子窗体,可以先创建一个新窗体,然后把它的MDIChild 属性设为True 制作:黄传禄
4.MDI窗体的基本特征 (1)所有子窗体都在MDI窗体的内部区域显示,不能移出MDI父窗体之外 (2)当一个子窗体最小化时,它的图标会出现在MDI窗体上, 并不在系统的任务栏上 (3)当子窗体最大化时,每个子窗体都有自己的标题;当子窗体最小化时,其标题与MDI窗体的标题合并,在MDI窗体的标题栏中显示出来 (4)通过设定AutoshowChildren属性,可以使子窗体在装入时自动显示或隐藏 (5)如果活动子窗体有菜单,则菜单均显示在MDI窗体的菜单栏中,而不是显示在子窗体中 制作:黄传禄
5.排列子窗体 在MDI窗体中使用Arrange方法排列子窗口或图标,格式: object.Arrange arrangement • object:必须是一个MDI窗体对象表达式 • arrangement:参数为一个数值或常数 制作:黄传禄
arrangement设置值 制作:黄传禄
例:建立一个MDI窗体,在父窗体上建立3个子窗体,并对3个子窗体按不同的方式排列例:建立一个MDI窗体,在父窗体上建立3个子窗体,并对3个子窗体按不同的方式排列 制作:黄传禄
VB工程管理-工程的组成 • VB工程包含多种类型的文件 • 其中最常用的文件是: • 工程文件 包含与该工程有关的全部文件、对象以及所设置的环境选项的信息,扩展名.vbp • 窗体文件 包含窗体及其控件有关属性的文本描述、常量或变量的声明、以及窗体内的过程代码等,扩展名为.frm 若窗体中对象的数据含有二进制属性,保存该窗体时将自动生成同名的二进制数据文件,扩展名为.frx • 标准模块文件 通常用来定义供其他窗体或模块引用的全局常量、变量、过程等,扩展名为.bas 制作:黄传禄
VB工程管理-工程的基本操作 1.新建、打开和保存工程 新建工程 • 启动VB时:“新建工程”对话框的“新建”选项卡 • VB窗口中:“文件→新建工程” 打开工程 • 启动VB时: “现存”、“新建” • VB窗口中:“文件→打开工程” 保存工程 • 单击 “保存工程”按钮 • “文件→保存工程” • “文件→工程另存为” 制作:黄传禄
2.工程中添加、移除和保存文件 • 添加指定类型的文件:“工程→添加…” • 删除选定的文件:“工程→移除…” • 保存选定的文件:“文件→保存…” • 另存选定的文件:“文件→…另存为” 注: • 上述操作可用快捷菜单中的相关命令 • 在当前工程中添加现存的文件时(例如,添加其他工程中的窗体),并不是添加该文件的副本,而只是简单地在工程中包含对该文件的引用。 制作:黄传禄
3、菜单的设计与应用-相关概念 1. 菜单的类型 • 下拉菜单:常以菜单栏的形式出现在标题栏下面 • 弹出菜单(快捷菜单):独立于菜单栏而显示在窗体上的浮动菜单,其菜单项取决于按下鼠标右键时指针所处的位置。 2. VB中的菜单控件 • 菜单和菜单项均看作是菜单控件 • 菜单控件两个最重要的属性 名称(Name):程序代码中用来引用菜单控件 标题(Caption):出现在控件上的文本 • 菜单控件只响应Click事件 制作:黄传禄
打开菜单编辑器: • “工具→菜单编辑器” • 工具栏“菜单编辑器”按钮 • 使用快捷键Ctrl+E 1. 常用属性 • 标题:设置Caption属性 字符前加&,该字符成为访问键 只输入一个减号-,创建分隔条 • 名称:设置Name属性 注:对分隔条,也需定义名称 制作:黄传禄
索引(Index):指定一个数值来确定菜单项在控件数组中的位置索引(Index):指定一个数值来确定菜单项在控件数组中的位置 • 快捷键(S):通过键盘按键的组合来快速地访问菜单项 • 复选(Checked):决定是否在菜单项的左边显示复选框 • 有效(Enabled):决定是否让菜单项对事件作出响应 • 可见(Visible):决定是否将菜单项显示在菜单 制作:黄传禄
2. 编辑菜单控件 3、 菜单的设计与应用-使用菜单编辑器 如果菜单控件的前面没有内缩符号“····”,表明该控件建立的是主菜单,否则为菜单命令或子菜单。 制作:黄传禄
菜单编辑器各项参数的说明 • 1、“标题(P)”文本框:此框中输入的内容就是一个菜单项的标题,用户可以看见,它相当于一个菜单控件Caption属性.这里输入的内容将会在"菜单项显示区"中显示出来. • 2、“名称(M)”文本框:此框中输入的内容是菜单项的内部名,相当于菜单控件的Name属性,Visual Basic把它作为该菜单项的 Click事件过程中的控件名。在设计一个菜单时,其中的每个菜单项的“名称”都必须有内容,且都必须有不同的内容,除非这些菜单项被设计成一个控件数组。 制作:黄传禄
3、“索引(X)”框:如果想使一个菜单项成为控件数组的一部分,就需要使用索引框。如前所述,控制件数组允许在运行进采用Load语句添加新的控件,利用Unload语句删除添加的控件。因此把一个菜单项设置为是控件数组的一个元素时,就能使所设计的菜单在运行时根据需要扩大或缩小。该框相当于菜单控件的属性。3、“索引(X)”框:如果想使一个菜单项成为控件数组的一部分,就需要使用索引框。如前所述,控制件数组允许在运行进采用Load语句添加新的控件,利用Unload语句删除添加的控件。因此把一个菜单项设置为是控件数组的一个元素时,就能使所设计的菜单在运行时根据需要扩大或缩小。该框相当于菜单控件的属性。 • 4、“快捷键(S)”框:这是一个用来设置菜单项快捷键的场所,用鼠标单击右端的箭头,在下拉式列表框中将列出可供选用的各种快捷键。如图所示。被选用的快捷键将在“菜单项显示区”里显示出来,它相当于菜单控件的属性。 制作:黄传禄
5、“帮助上下文ID(H)”框:可在该框中键入数值,以便用来在帮助文件(用HelpFile属性设置)中查找相应帮助主题,它相当于菜单控件的HelpContextID属性。5、“帮助上下文ID(H)”框:可在该框中键入数值,以便用来在帮助文件(用HelpFile属性设置)中查找相应帮助主题,它相当于菜单控件的HelpContextID属性。 • 6、“协调位置(Q)”框:此框将在下拉式列表框里选择取值,以决定一个菜单项或在菜单的什么位置出现。下拉式列表框里有4个可选值: 0-None 菜单项不显示 1-Left 菜单项靠左显示 2-Middle 菜单项居中显示 3-Right 菜单项靠右显示 制作:黄传禄
当窗体上有菜单,窗体上链接或嵌入的对象也有菜单时,如何处理窗体菜单项及其位置,就要用到此框,它相当于菜单控件的NegotiatePosition属性。当窗体上有菜单,窗体上链接或嵌入的对象也有菜单时,如何处理窗体菜单项及其位置,就要用到此框,它相当于菜单控件的NegotiatePosition属性。 • 7、“复选(C)”框:此复选框决定菜单项的左侧是否会出记号“”,以明确表示某个菜单项当前是否处于活动状态。它不会对菜单项的执行结果产生任何影响,它当于菜单控件的Checked属性。 制作:黄传禄
8、“有效(E)”框:此复选框作用相当于菜单控件的Enabled属性,确定菜单项是否对单击事件进行响应,默认总是选中此复选框,即有“”记号,若去除“”记号,该属性被设置为,那么该菜单项以灰色显示,不响应单击事件。8、“有效(E)”框:此复选框作用相当于菜单控件的Enabled属性,确定菜单项是否对单击事件进行响应,默认总是选中此复选框,即有“”记号,若去除“”记号,该属性被设置为,那么该菜单项以灰色显示,不响应单击事件。 • 9、“可见(V)”框:此复选框作用相当于菜单控件的Visable属性。如果一个菜单项被设置为不可见,那么它的所有子菜单也不可见。 制作:黄传禄
10、“显示窗口列表(W)”框:此复选框在多文档界面(MDI)时有用,以决定在“窗口”菜单的下拉式菜单里是否自动显示当前所有已打开的子窗体。它相当于菜单控件的WindowsList属性。10、“显示窗口列表(W)”框:此复选框在多文档界面(MDI)时有用,以决定在“窗口”菜单的下拉式菜单里是否自动显示当前所有已打开的子窗体。它相当于菜单控件的WindowsList属性。 • 11、“确定”和“取消”按钮:当完成菜单设计时,就单击“确定”按钮,如果打算作废,就单击“取消”按钮。 制作:黄传禄
12、上、下、左、右箭头按钮:用来对菜单项显示区里显示的诸菜单项进行位置操作。在菜单项显示区里子菜单用缩进格式表示,选中的菜单项被置为高亮度,它是箭头按钮的操作对象。单击向上箭头按钮,会使高亮度菜单项和它上面的那个菜单项互换位置,单击向下箭头按钮,会使高亮度菜单项昨它下面的那个菜单项毒草换位置。左、右箭头用于控抽子菜单的缩进层次。单击右箭头一资助,就使一个菜单项缩进一层(用4个点表示);单击左箭头一次,就使一个菜单项上升一层(去掉4个点)。要注意的是,一个菜单项最多只能比它上面菜单项缩进一层。12、上、下、左、右箭头按钮:用来对菜单项显示区里显示的诸菜单项进行位置操作。在菜单项显示区里子菜单用缩进格式表示,选中的菜单项被置为高亮度,它是箭头按钮的操作对象。单击向上箭头按钮,会使高亮度菜单项和它上面的那个菜单项互换位置,单击向下箭头按钮,会使高亮度菜单项昨它下面的那个菜单项毒草换位置。左、右箭头用于控抽子菜单的缩进层次。单击右箭头一资助,就使一个菜单项缩进一层(用4个点表示);单击左箭头一次,就使一个菜单项上升一层(去掉4个点)。要注意的是,一个菜单项最多只能比它上面菜单项缩进一层。 制作:黄传禄
13、“下一个”按钮:单击“下一个”按钮,将会从菜单项显示区目前选中的菜单项处进到下一个菜单项。如果已处在最后一个菜单项,那么就会插入一个新的菜单项,此菜单项的缩进层次与它前面的菜单项相同。13、“下一个”按钮:单击“下一个”按钮,将会从菜单项显示区目前选中的菜单项处进到下一个菜单项。如果已处在最后一个菜单项,那么就会插入一个新的菜单项,此菜单项的缩进层次与它前面的菜单项相同。 • 14、“插入”按钮:单击“插入”按钮,表示在当前高亮度菜单项的上面要插入一个新的菜单项。 • 15、“删除”按钮:单击“删除”按钮,表示把当前高亮度菜单项删去。 制作:黄传禄
方法:先通过菜单编辑器设计菜单,然后编写各菜单控件的Click事件过程。方法:先通过菜单编辑器设计菜单,然后编写各菜单控件的Click事件过程。 例: 创建简易编辑器 (1) 设计菜单 3、 菜单的设计与应用-设计下拉菜单 制作:黄传禄
例1创建简易编辑器 (2) 设计界面 菜单下面绘制两条直线(两个Line控件),一条为黑色,一条为白色。 黑线的Y1和Y2属性设为0 白线的Y1和Y2属性设为10 文本框Text1: MultiLine设为True ScrollBars设为3 (3) 编写菜单控件的Click事件过程 3、 菜单的设计与应用-设计下拉菜单 制作:黄传禄
3、 菜单的设计与应用-设计下拉菜单 代码分析与演示: Private Sub mnuFileCls_Click() Text1.Text = "" End Sub Private Sub mnuFileExit_Click() '退出 Unload Me End Sub Private Sub mnuEditColor_Click() '颜色 Text1.ForeColor = vbRed '设为红色 End Sub 制作:黄传禄
3、 菜单的设计与应用-设计下拉菜单 • Private Sub mnuEditSizeArr_Click(Index As Integer) • For i = 1 To 3 • mnuEditSizeArr(i).Checked = False • Next i • Select Case Index • Case 1 • s = 12 • mnuEditSizeArr(1).Checked = True • Case 2 • s = 16 • mnuEditSizeArr(2).Checked = True • Case 3 • s = 20 • mnuEditSizeArr(3).Checked = True • End Select • Text1.FontSize = s • End Sub 制作:黄传禄
3、 菜单的设计与应用-设计下拉菜单 • Private Sub mnuHelpAbort_Click() '关于 • MsgBox "一个有待完善的简易文本编辑器,版本1.0", vbOKOnly, "版本信息" • End Sub • Private Sub Form_Load() • Text1.FontSize = 12 • End Sub 制作:黄传禄
用PopupMenu方法可显示弹出式菜单 [对象.]PopupMenu 菜单控件名称 若“对象”缺省,则在当前窗体中显示弹出菜单 通常,按下鼠标右键时显示弹出菜单,例如: Private Sub Form或控件名称_MouseUp (Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 2 Then '如果按的是鼠标右键 PopupMenu 菜单名'显示弹出菜单 End If End Sub 菜单的设计与应用-设计弹出菜单 制作:黄传禄
例2 弹出菜单设计 (1) 打开例1所建立的工程 (2) 添加如下的事件过程: Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 2 Then PopupMenu mnuEdit '弹出名称为mnuEdit的菜单 End If End Sub 注:若要创建一个不显示在菜单栏中的弹出菜单,设计菜单时,需取消主菜单的“可见”复选框。 菜单的设计与应用-设计弹出菜单 制作:黄传禄
4 工具栏(ToolBar) 将控件Microsoft Windows Common Controls 6.0添加到工具箱,通过ToolBar、ImageList组合使用建立工具栏。 创建工具栏:步骤: 1.在ImageList控件中添加所需的图象; 2.在ToolBar控件中创建Button对象; 3.设置ToolBar控件的“属性页”; 4.在ButtonClick事件中用Select Case语句对各按钮进行相应的编程。 制作:黄传禄
在ImageList控件中添加图象:ImageList控件不单独使用,专门为其它控件提供图像库。在ImageList控件中添加图象:ImageList控件不单独使用,专门为其它控件提供图像库。 索引(Index) 关键字(Key) 在ToolBar中引用图象文件的扩展名为: .ico、.bmp、.gif、.jpg等 制作:黄传禄
在ToolBar控件中添加按钮 1.为工具栏连接图象 ToolBar与ImageList的连接 工具栏样式 制作:黄传禄
2.为工具栏增加按钮 索引(Index):每个按钮的数字编号 关键字(Key)每个按钮的标识名 ButtonClick事件中引用; 样式(Style),共6种 0 —命令按钮 1 —复选按钮 2 —单选按钮 3 —固定宽度分隔符 4 —分隔符 5 —按钮菜单 图象(Image) ImageList对象中的图象,值可以是Key或Index 制作:黄传禄
响应ToolBar控件事件 • ToolBar控件常用的事件有两个: • ButtonClick和ButtonMenuClick。 • 前者对按钮样式为0-2,后者对样式为5的菜单按钮。 • 用索引Index确定按钮 • 用关键字Key确定按钮 制作:黄传禄
Private Sub Toolbar1_ButtonClick(Byval Button As ComctlLib.Button) • Select Case Button.Index • Case 1 • FileNewProc • Case 2 • FileOpenProc • …… • End Select • End Sub 注意: 第1个按钮的Index值为1,用Index还是用Key比较,Key 可读性好,可维护性好。 • Select Case Button.Key • Case "TNew" • FileNewProc • Case "TOpen" • FileOpenProc • ..... • End Select 制作:黄传禄
例:为例2的简易编辑器添加工具栏,并实现相应功能(单击工具栏中的按钮和使用相应菜单命令实现一样的功能)例:为例2的简易编辑器添加工具栏,并实现相应功能(单击工具栏中的按钮和使用相应菜单命令实现一样的功能) 界面如下所示: 制作:黄传禄
主要代码分析与演示: • Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button) • Select Case Button.Key • Case "delete" • mnufilecls_Click • Case "color" • mnuEditColor_Click • Case "help" • mnufileAboat_Click • End Select • End Sub 制作:黄传禄
状态栏 ( StatusBar ) 状态栏显示系统信息和对用户的提示,如:系统日期、软件版本、光标的当前位置、键盘的状态等。一般在窗口的底部。 显示的文本 样式 制作:黄传禄
创建状态栏的基本步骤: 1.在窗体上添加一个StatusBar控件; 2.设置StatusBar控件的属性; 3.编写代码。 可以在应用程序中动态修改状态栏的属性,如添加、删除窗格,修改窗格的显示内容等。 制作:黄传禄
例:为上例的简易编辑器添加状态栏,并在状态栏中显示相关信息例:为上例的简易编辑器添加状态栏,并在状态栏中显示相关信息 界面如下所示: 制作:黄传禄
代码分析与演示: Private Sub Timer1_Timer() If StatusBar1.Panels(3).Text <> Str(Time) Then StatusBar1.Panels(3).Text = Time End If End Sub 制作:黄传禄
本章小结 本章主要介绍了应用软件开发过程中涉及到的界面设计,包括窗体、多窗体、 MDI窗体的设计的方法,菜单、工具栏和状态栏的设计. 1.窗体是放置其他所有控件的容器,任何一个标准.EXE类型的VB应用程序至少有一个窗体 2.多重窗体的设计与应用 3.菜单的设计与应用 4.工具栏和状态栏 习题讲解(p137-p138) 制作:黄传禄