第8章 菜单及窗体的设计 8.1 菜单 8.2 对话框 8.3 工具栏 8.4 状态栏 8.5 多重窗体与MDI窗体 8.6 键盘和鼠标
8.1 菜单 菜单有两种:下拉式菜单和弹出式菜单。 下拉式菜单的组成结构: 菜单中的所有菜单项都与命令按钮相似,有属性、方法和事件 菜单名 子菜单项 分隔条 快捷键 热键 菜单中的所有菜单项都与命令按钮相似,有属性、方法和事件 为菜单项编写程序就是编写Click事件过程
8.1.1 菜单编辑器的使用 可以使用以下四种方式进入菜单编辑器: (1)在窗体环境下单击菜单命令“工具|菜单编辑器” (2)使用热键Ctrl+E。 (3)单击常用工具栏中的“菜单编辑器”按钮。 (4)在要建立菜单的窗体上单击鼠标右键,在弹出的快捷菜单中选择“菜单编辑器”命令。
8.1.1 菜单编辑器的使用 标题(Caption)----应用程序菜单上出现的菜单名称 名称(Name)----用于在程序中引用该菜单项 命令名称 Name 必须填写 快捷键 Shortcut 菜单项是否可操作 菜单项是否可见 标题(Caption)----应用程序菜单上出现的菜单名称 名称(Name)----用于在程序中引用该菜单项 分隔菜单项:在“标题”中输入“-”(减号)
热键与快捷键 可通过键盘来访问菜单项 热键 使用Alt键和菜单项标题中的一个字符打开菜单 在字符前加一个&符号构成热键 【举例】在“标题”中输入“文件(&F)”,则菜单显示“文件(F)”,F为热键 快捷键 与热键类似,只是它不是用来打开菜单,而是直接执行相应菜单项的操作 在菜单编辑器中打开快捷键下拉式列表框设置 本章目录
8.1.2 下拉式菜单 例8.1 仿照Windows附件中的“记事本”,创建下拉式“文件”菜单,如图8.3所示。 图8.3 例8.1下拉式菜单窗体
8.1.3 弹出式菜单 用户在某个对象上单击右键所弹出的菜单,显示位置取决于单击鼠标时的位置; 设计过程与普通菜单相同,需要在“菜单编辑器”内不选中“可见复选框” 显示弹出式菜单的方法: [对象].PopupMenu 菜单名[,标志,x, y] x, y是快捷菜单显示的位置 标志,表示弹出的位置和触发的键 0---弹出快捷菜单在鼠标右侧 4---弹出快捷菜单在鼠标中间 8---弹出菜单在鼠标左侧 使用MouseDown事件弹出菜单 Button=1(单击鼠标左键) Button=2(单击鼠标右键) Sub Text1_MouseDown(Button As Interger) If Button = 2 Then PopupMenu EditMenu End Sub
8.1.3 弹出式菜单 例8.2 设计一个如图8.5所示的窗体,窗体上有4个标签、2个文本框以及菜单。2个文本框用于输入数据,Label4标签用于显示运算结果;“加减运算”菜单能够完成加减运算以及清除功能;弹出式菜单“乘除运算”能够完成乘除运算。 图8.5 例8.2运行效果图
8.2 对话框 预定义对话框 自定义对话框 通用对话框 可以调用函数直接显示的系统定义对话框; InputBox()函数和MsgBox()函数; 自定义对话框 用户根据应用程序的需要自行定义的对话框; 通用对话框 打开、另存为、颜色、字体、打印、帮助
通用对话框控件(CommonDialog) 利用通用对话框控件可在窗体上创建通用对话框 通用对话框不是标准控件,是一种ActiveX控件 工程|部件|控件选项卡|Microsoft Common Dialog Control 6.0 通用对话框在运行时不显示,直到用Action属性或Show方法激活 通用对话框仅用于应用程序与用户之间进行信息交互,是输入输出的界面 不能真正实现文件打开、文件存储、设置颜色、字体设置、打印等操作 如果想要实现这些功能,需要编程实现 本章目录
通用对话框的基本属性和方法 对话框的类型 Action属性值 方法 表8.5 CancelError属性 打开对话框 1 另存为对话框 2 颜色对话框 3 字体对话框 4 打印机对话框 5 帮助对话框 6 ………… ShowOpen ………… ShowSave ………… ShowColor ………… ShowFont ………… ShowPrinter ………… ShowHelp 表8.5 CancelError属性 True:单击取消按钮,Err.Number设置为32755(cdCancel) False:单击取消按钮,没有错误警告 属性页对话框 【举例】显示“打开”对话框 CommonDialog1.Action=1 CommonDialog1.ShowOpen
8.2.1 “打开”对话框 由 ShowOpen方法来显示 重要属性 : (1) FileName 文件名称,包含路径 8.2.1 “打开”对话框 由 ShowOpen方法来显示 重要属性 : (1) FileName 文件名称,包含路径 (2) FileTitle 文件标题,不包含路径 (3) Filter 过滤器,确定文件列表框中所显示文件的类型 显示文本文件和所有文件:Text Files|*.txt|所有文件|*.* (4) FilterIndex 过滤器索引,文件列表中指定某类型文件 (5) InitDir 初始化路径,指定“打开”对话框中的初始目录
【举例】通过打开对话框,选择一个BMP位图文件,在图片框中显示该图片。 FileName=“*.Bmp” .InitDir=“C:\Windows” .Filter=“Pictures(*.Bmp)|*.Bmp|All Files(*.*)|*.*” .FilterIndex=1 CommonDialog1. DialogTitle=“浏览图片” Private Sub Command1_Click() CommonDialog1.ShowOpen Picture1.Picture = LoadPicture(CommonDialog1.FileName) End Sub 本章目录
8.2.2 “另存为”对话框 与打开文件对话框的属性基本相同,特有的属性是DefaultExt属性,用于设置缺省的扩展名 8.2.2 “另存为”对话框 Commondialog1.Action=2或者Commondialog1.ShowSave 与打开文件对话框的属性基本相同,特有的属性是DefaultExt属性,用于设置缺省的扩展名 “另存为”对话框并不能真正地保存文件,保存文件的操作需要单独编程来完成。 【举例】 Sub Command2_Click () CommonDialog1.FileName=“Default.Txt” CommonDialog1.DefaultExt=“Txt” CommonDialog1.Action=2 Open CommonDialog1.filename For Output As #1 Print #1, Text1.Text '保存文件 Close #1 ' 关闭文件 End Sub 本章目录
8.2.3 “颜色”对话框 重要属性Color,它返回或设置选定的颜色 【举例】 Sub Command3_Click () 8.2.3 “颜色”对话框 Commondialog1Action=3或者Commondialog1.ShowColor 重要属性Color,它返回或设置选定的颜色 【举例】 Sub Command3_Click () CommonDialog1.ShowColor Text1.ForeColor = CommonDialog1.Color End Sub 设置文件框前景颜色 本章目录
8.2.4 字体对话框 Font 获取选择的字体 Color 选定的颜色 设置Action=4或者Commondialog1.ShowFont 在选择字体前,必须先设置flags属性,该属性通知commondialog控件是否显示屏幕字体、打印机字体或者两者皆有之。 Flags属性的设置 Font 获取选择的字体 Color 选定的颜色 Flags值 对应的功能 1 显示屏幕字体 2 显示打印机字体 3 显示打印机字体和屏幕字体 256 在“字体”对话框显示删除线和下划线复选框以及颜色组合框
Private Sub cmdFont_Click() CommonDialog1.Flags = 1+256 CommonDialog1.ShowFont Text1.FontName = CommonDialog1.FontName Text1.FontSize = CommonDialog1.FontSize Text1.FontBold = CommonDialog1.FontBold Text1.FontItalic = CommonDialog1.FontItalic Text1.FontStrikethru = CommonDialog1.FontStrikethru Text1.FontUnderline = CommonDialog1.FontUnderline End Sub
8.2.5 打印对话框(略) 主要属性: Copies:打印份数 FromPage:打印起始页号 ToPage:打印终止页号 8.2.5 打印对话框(略) CommonDialog1.Action=5或者CommonDialog1.ShowPrinter 主要属性: Copies:打印份数 FromPage:打印起始页号 ToPage:打印终止页号 Max属性和Min属性 用来限制FromPage和ToPage的范围。 Min指定所允许的起始页码,Max指定所允许的最后页面 Falgs属性 该属性用来设置默认打印页面范围
8.3 工具栏(略) ToolBar控件和ImageList控件通常绑定使用,使用前必须先添加到工具箱中; 执行菜单命令“工具|部件”,在“部件”对话框中选中“Microsoft Windows Common Controls 6.0”,可将其添加到工具箱中; 创建工具栏的步骤如下: (1) 在ImageList控件中添加所需的图像。 (2) 在ToolBar控件中创建Button对象。并将ToolBar控件与ImageList控件建立关联。 (3) 在ButtonClick事件中使用Select Case语句对每个按钮进行相应的编程。 ToolBar控件常用的事件有: ButtonClick和ButtonMenuClick
例8.7 创建如图8.16所示的窗体,窗体上有一个工具栏,工具栏按钮分三组:第一组为新建、打开、存盘;第二组为剪切、复制、粘贴;第三组为加粗、倾斜、下划线。然后编写相应的事件过程代码。 图8.16 例8.7设计的工具栏效果图
8.4 状态栏(略) 状态栏(StatusBar)控件与工具栏(ToolBar)控件同属于一个.ocx文件,因此只要添加了工具栏控件,就可以在工具箱中找到状态栏控件。 执行菜单命令“工具|部件”,在“部件”对话框中选中“Microsoft Windows Common Controls 6.0”,即可将其添加到工具箱中。 使用StatusBar控件设计状态栏的基本步骤如下: (1)在窗体上建立一个状态栏。 (2)设置StatusBar控件的“属性页”对话框中的各项属性。 (3)编写代码。
例8.8 在例8.7的基础上在窗体上添加一个文本框,让其MultiLine属性值为True,ScrollBar属性值为2。在窗体的底部创建如图8.22所示的状态栏。状态栏共设置了6个窗格,它们分别显示光标位置、操作员名称、大小写控制键、系统时间。
8.5 多重窗体与MDI窗体 8.5.1 多重窗体 一个应用程序中有多个并列的普通窗体,每个窗体有自己的界面和代码,完成不同的功能 1. 添加窗体 工程|添加窗体 每个窗体有独立的Frm文件 同一工程不能有相同名称的窗体 2. 设置启动对象 系统默认缺省窗体名为Form1的窗体为开始窗体 工程|属性 本章目录
3. 窗体加载和卸载 ①加载窗体: Load 窗体名 ②卸载窗体: UnLoad 窗体名 ③显示窗体: [窗体名].Show [窗体模式] 首次用Load语句将窗体调入内存时,依次触发Initialize和Load事件 ②卸载窗体: UnLoad 窗体名 执行UnLoad语句后,将指定的窗体从内存中删除。 将窗体从内存中卸载时,触发Unload事件 UnLoad的一种常见用法是UnLoad Me,其含义是关闭窗体自己。 关键字Me代表UnLoad Me语句所在的窗体。 ③显示窗体: [窗体名].Show [窗体模式] 如果执行Show方法时,窗体不在内存中,则Show方法自动把窗体装入内存,然后再显示出来。 “窗体模式” 为0时,窗体为“非模式”方式;当取值为1时,窗体为“模式”方式。 ④隐藏窗体: [窗体名].Hide 该方法用来将指定的窗体暂时隐藏起来,但并没有从内存中删除。 “窗体名”缺省时默认为是当前窗体。
4. 不同窗体间数据的访问 (1)直接访问另一个窗体上的控件数据 另一个窗体名.控件名.属性 (2)访问另一个窗体中的全局变量 Text1 = Val(Form2.Text1) + Val(Form2.Text2) (2)访问另一个窗体中的全局变量 另一个窗体名.全局变量名 (3)在标准模块定义公共变量,实现相互访问 如:Public X As String 【说明】 要获得不同窗体间变量的值,该变量必须在窗体通用段声明为全局(Public)变量。局部变量不能在窗体间读取。如果全局变量的声明是在标准模块中,则可以省略“窗体名”。 本章目录
8.5.2 MDI窗体 1.创建和设计MDI窗体 2.创建和设计MDI子窗体 3.设置MDI窗体为启动窗体 先创建一个新的普通窗体,然后将其MDIChild属性设置为True即可。 3.设置MDI窗体为启动窗体 执行菜单命令“工程|工程1属性”,弹出“工程属性”对话框,从“启动对象”下拉列表框中选择MDI窗体名称,然后单击“确定”按钮。
8.5.2 MDI窗体 例8.10 创建一个具有多文档界面的简易文本编辑器,运行效果图之一如图8.26所示。 图8.26 例8.10运行效果图
8.6键盘和鼠标--8.6.1 键盘(略) 键盘上的键大致分为两大类 键盘事件 能够产生ASCII码的键,如大小写字母键、数字键、Enter、Backspace、Tab键等; 不能产生ASCII码的控制键,如F1~F12、方向键等。 键盘事件 (1)KeyPress事件:用户按下并且释放一个会产生ASCII码的键时被触发 Sub Form_KeyPress(KeyAscii As Integer) (2)KeyUp事件:用户释放键盘上的任意一个键时被触发。 (3)KeyDown事件:用户按下键盘上的任意一个键时被触发。 Sub Form-KeyDown(KeyCode As Integer,Shift As Integer) 参数KeyCode:按键的扫描代码 同一字符大小写,其keycode参数值与大写相同 上档和下档符号键,其keycode参数值与下档相同 小键盘上的数字键与大键盘上的数字键的keycode码不相同
8.6键盘和鼠标--8.6.1 键盘(略) 键盘事件过程的参数 Shift=2 按下Ctrl键 Shift=4 按下Alt键 Shift=1 按下Shift键 Shift=2 按下Ctrl键 Shift=4 按下Alt键
8.6键盘和鼠标--8.6.1 键盘(略) 例8.12 编写一个程序,模仿Windows操作,当同时按下Alt键和F4键时关闭当前窗口。为了保证窗体优先接收到键值,应先将窗体的KeyPreview属性值设置为True。 Private Sub Form_KeyDown (KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyF4 And Shift = 4 Then Unload Me End If End Sub
8.6键盘和鼠标-- 8.6.2 鼠标(略) 鼠标事件 事件过程 Click 、DblClick、MouseDown、 MouseMove 、 MouseUp 事件过程 Sub Form-MouseDown(Button as Integer,Shift As Integer, X As Single,Y As Single) 鼠标事件过程的参数 (1)Button=1 鼠标左键 Button=2 鼠标右键 Button=4 鼠标中键 (2)Shift=1 按下Shift键 Shift=2 按下Ctrl键 Shift=4 按下Alt键 (3)x,Y 代表当前鼠标的位置
8.6键盘和鼠标-- 8.6.2 鼠标(略) 例8.14 在窗体上创建两个文本框,程序运行时,在窗体上按下鼠标左键,分别显示当前鼠标指针X坐标值和Y坐标值。 Private Sub Form_MouseMove(Button As Integer, Shift As Integer, - X As Single, Y As Single) text1.Text = X text2.Text = Y End Sub 图8.31 例8.14运行效果图