Transcript Document
第9章 菜单和工具栏设计 在Windows环境中,几乎所有的应用软件都通过菜 单来实现各种操作。而对于VB应用程序来说,当操作 比较简单时,一般通过控件来执行,而当要完成较复 杂的操作时,使用菜单将很方便。 工具栏同样以其直观、快捷的特点出现在各种应用 程序中,事实上工具栏已经成为Windows应用程序的 标准功能。它使用户不必在一级级的菜单中去搜寻需 要的命令,给用户带来比菜单更为快捷的操作。 本章主要内容: ● 菜单设计 ● 工具栏设计 9.1 菜单设计 菜单的基本作用有两个,一是提供人机对话的接口,以 便让用户选择应用系统的各种功能;二是管理应用系统, 控制各种功能模块的运行。一个高质量的菜单程序,不仅 能使系统美观,而且能使用户使用方便,并可避免由于误 操作而带来的严重后果。 在实际应用中,菜单可分为两种基本类型:下拉式菜单 和弹出式菜单。 下拉式菜单一般通过单击菜单栏中菜单标题(如“文 件”、“编辑”、“视图”等)的方式打开,如图9-1所示。 图9-1 下拉式菜单 弹出式菜单则通过用鼠标右键单击某一区域的方式打开, 如图9-2所示。 一般来说,不同的区域所“弹出”的菜单内容是不同的。 如在VB的工具栏中的弹出菜单与窗体设计器中的弹出菜单 就完全不同。 图9-2 弹出式菜单 9.1.1 下拉式菜单 在下拉式菜单系统中,一般有一个主菜单,称为菜单栏。 其中包括一个或多个选择项,称为菜单标题。当单击一个 菜单标题时,包含菜单项的列表(菜单)即被打开。菜单 由若干个命令、分隔条、子菜单标题(其右边含有三角的 菜单项)等菜单项组成。当选择子菜单标题时又会“下拉” 出下一级菜单项列表,称为子菜单。VB的菜单系统最多可 达6层。 在VB中,菜单也是一个图形对象,即控件。与其他控件 一样,它具有定义它的外观与行为的属性。在设计或运行 时可以设置Caption属性、Enabled和Visible属性、Checked 属性以及其它属性。菜单控件只包含一个事件,即Click事 件,当用鼠标或键盘选中该菜单控件时,将调用该事件。 与一般控件不同的是,菜单控件不在VB的工具箱中,需 要在VB“菜单编辑器”中进行菜单设计。 1. 菜单编辑器 菜单通过菜单编辑器(即菜单设计窗口)建立。可以通 过下面的4种方法之一进入菜单编辑器: l 执行“工具”菜单中的“菜单编辑器”命令。 l 使用快捷键〈Ctrl〉+〈E〉。 l 单击工具栏中的“菜单编辑器”按钮。 l 在要建立菜单的窗体上单击鼠标右键,在快捷菜 单中,单击“菜单编辑器”命令。 打开后的菜单编辑器窗口如图9-3所示。 图9-3 菜单编辑器 菜单编辑器分为3个部分。 (1) 菜单控件属性区 菜单控件属性区用于设置菜单项的各个属性,表9-1列 出其中的主要属性。 表9-1 属 性 菜单控件的主要属性 说 明 标题(Caption) 设置菜单项的标题,相当于控件的Caption属性,也是显示在菜单中的字符。可 以在标题中设置热键。可以用分割线将某些菜单项归为一类并与其他项隔开 名 称 ( Name ) 设置菜单项的名称,相当于控件的Name属性。菜单项的命名规则与控件的命名 规则相同 索引(Index) 设置菜单控件数组的下标,相当于控件数组的Index属性 快 捷 键 (Shortcut) 设置与菜单项等价的快捷键。快捷键的赋值包括功能键与控制键的组合,如 Ctrl+F1键或Ctrl+A键。它们出现在菜单中相应菜单项的右边 复 选 (Checked) “复选”属性设置为True时,可以在相应的菜单项旁加上记号“√”。表明该菜 单项当前处于活动状态 有效(Enabled) 用来设置菜单项的操作状态。如果该属性被设置为False,则相应的菜单项会变 “灰”,不响应用户事件 可 见 ( Visible ) 设置该菜单项是否可见。如果该属性被设置为False,则相应的菜单项将被暂时 从菜单中去掉,直到该属性重新被设置为True (2) 编辑区 编辑区共有7个按钮,用来对输入的菜单项进行简单的 编辑,见表9-2。 表9-2 按钮 编辑区的按钮 说明 用来产生或取消内缩符号“….”,内缩符号可以确定菜单的层次。单击一次 右箭头产生一个内缩符号,单击一次左箭头则删除一个内缩符号 用于调整菜单项的上下位置。当位于菜单控件列表框中的菜单项被选中后, 可以通过上、下箭头来移动其位置 用于进入下一个菜单项的设计 在光标所在处插入一个空白菜单项 删除光标所在处的菜单项 (3) 菜单项显示区 菜单项显示区位于菜单编辑器的下部,输入的菜单项在 这里显示出来,并通过内缩符号表明菜单项的层次。 说明: ①“菜单项”包括4个方面的内容:菜单名、菜单命令、 分隔线和子菜单。 ② 在输入菜单项时,如果在字母前加上“&”,则显示菜 单时在该字母下面加上一条下划线,可以通过〈Alt〉+“带 下划线的字母”打开菜单或执行相应的菜单命令。 ③ 内缩符号由4个小数点“….”组成,它表明菜单项所在 的层次。一个内缩符号“….”表示一层,两个内缩符号 “……..”表示两层,…,最多为6层。如果一个菜单项前面 没有内缩符号,则该菜单为菜单名,即菜单的第一层。 ④ 如果在“标题”栏内只输入一个“-”,则表示产生 一个分隔线。 ⑤ 只有菜单名没有菜单项的菜单称为“顶层菜单”, 在输入这样的菜单项时,通常在后面加上一个感叹号 (!)。 ⑥ 除分隔线外,所有的菜单项都可以接受Click事件。 【例9-1】在窗体上建立如图9-4所示的文件下拉菜单。 图9-4 建立下拉菜单 操作步骤如下: ① 执行“工具”菜单中的“菜单编辑器”命令,打开 “菜单编辑器”窗口。 ② 在标题栏中输入“文件(&F)”,在菜单项显示区中出 现同样的标题名称。按〈Tab〉键(或用鼠标)把输入光标 移到“名称”栏,在名称栏中输入file,此时菜单项显示区 中没有变化。 ③ 单击编辑区中的“下一个”按钮,菜单项显示区中的 条形光标下移,同时资料区的“标题”栏及“名称”栏被 清空,光标回到“标题”栏。 ④ 在标题栏中输入“新建”,该信息同时在菜单项显示 区中显示出来,用〈Tab〉键或鼠标把光标移到“名称”栏, 输入new,单击编辑区的右箭头,菜单显示区中的“新建” 右移,同时其左侧出现一个内缩符号“….”,表明“新建” 是“文件”的下一级菜单 ⑤ 依次输入菜单中的各项,如果需要指定快捷键,可以 单击“快捷键”栏右端的箭头,从中选出。例如为“打开” 菜单项选中“Ctrl+O”作为其快捷键。 ⑥ 设计完成后的窗口如图9-5所示,单击“确定”按钮, 完成菜单的建立工作。 图9-5 在菜单编辑器窗口建立下拉菜单 【例9-2】利用下拉式菜单为标签中的文本内容设置不 同的字体和风格。如图9-6所示。 图9-6 利用菜单控制标题板 设计步骤如下: ① 建立用户界面及设置对象属性,如图9-7所示。 图9-7 设计用户界面及设置对象属性 其中,菜单编辑器中各菜单项的设置见表9-3。 表9-3 标题(Caption) 菜单项的设置 名称(Name) 说明 标题板(&F) Menu 主菜单项1 ….文本字体(&N) Nam 子菜单项12 …. ….宋体 song 子菜单项121 …. ….隶书 li 子菜单项122 …. ….楷体 kai 子菜单项123 …. ….黑体 hei 子菜单项124 ….文本风格(&S) Styl 子菜单项13 …. ….粗体 Bld 子菜单项131 …. ….斜体 Itl 子菜单项132 …. ….下划线 Undrln 子菜单项133 ② 编写菜单项代码。“文本字体”中4个菜单选项的 Click事件代码为: Private Sub song_Click() Label1.FontName = "宋体" End Sub Private Sub li_Click() Label1.FontName = "隶书" End Sub Private Sub kai_Click() Label1.FontName = "楷体_GB2312" End Sub Private Sub hei_Click() Label1.FontName = "黑体" End Sub “文本风格”中3个菜单选项的Click事件代码为: Private Sub bld_Click() bld.Checked = Not bld.Checked Label1.FontBold = bld.Checked End Sub Private Sub Itl_Click() Itl.Checked = Not Itl.Checked Label1.FontItalic = Itl.Checked End Sub Private Sub Undrln_Click() Undrln.Checked = Not Undrln.Checked Label1.FontUnderline = Undrln.Checked End Sub 程序运行结果如图9-6所示。 2. 菜单控件数组 既然VB将菜单项视为控件,因此就能运用控件数组的概 念。菜单控件数组的作用主要有两个: l 用于动态地增删菜单项。 l 简化编程,用一段代码处理多个菜单项。 【例9-3】利用下拉式菜单设计简易的文本编辑器,使其具 有创建、编辑、保存文本文件的内容,如图9-8所示。 图9-8 使用下拉菜单的简单编辑器 设计步骤如下: ① 建立用户界面及设置对象属性。在窗体上增加一个公 共对话框控件,一个文本框控件,并设置对象属性,参见 图9-9所示。 图9-9 建立用户界面及设置对象属性 其中,菜单编辑器中各菜单项的设置见表9-4。 表9-4 菜单项的设置 标题(Caption) 名称(Name) 索引(Index) 说 明 文件(&F) Files 主菜单项1 ….新建(&N) File 0 子菜单项11 ….打开(&O) File 1 子菜单项12 ….保存(&S) File 2 子菜单项13 ….另存(&A) File 3 子菜单项14 ….关闭(&X) File 4 子菜单项15 编辑(&E) Edit ….剪切 Edi 0 子菜单项21 ….复制 Edi 1 子菜单项22 ….粘贴 Edi 2 子菜单项23 ….删除 Edi 3 子菜单项24 主菜单项2 ② 编写菜单项代码。菜单控件数组File的Click事件代码为: Private Sub File_Click(Index As Integer) n = Index Select Case n Case 0 ' 新建 Text1.Text = "" Form1.Caption = "未命名" Case 1 CommonDialog1.ShowOpen fname = CommonDialog1.FileName ' 打开 ' 显示“打开”公共对话框 If fname <> "" Then Text1.Text = "" Open fname For Input As #1 b = "" Do Until EOF(1) Line Input #1, nextline b = b & nextline & Chr(13) & Chr(10) Loop Close #1 Text1.Text = b End If Form1.Caption = fname Case 2 ' 保存 If Form1.Caption = "未命名" Or Form1.Caption = "" Then CommonDialog1.ShowSave ' 显示“另存为”公共对话框 fname = CommonDialog1.FileName Else fname = Form1.Caption End If If fname <> "" Then Open fname For Output As #1 Print #1, Text1.Text Close #1 End If Case 3 CommonDialog1.ShowSave ' 另存 ' 显示“另存为”公共对话 框 fname = CommonDialog1.FileName If fname <> "" Then Open fname For Output As #1 Print #1, Text1.Text Close #1 End If Case 4 Text1.Text = "" Unload Me End Select Text1.SetFocus End Sub ' 关闭 编写“编辑”菜单中的菜单控件数组Edi的Click事件代码。 在编写过程中,需要用到两个与剪贴板有关的方法:SetText 方法和GetText方法。其中SetText方法是将指定的文本放入系 统剪贴板中: Clipboard.SetText Text1.SelText 剪贴板对象的GetText方法可以作为函数一样使用,它返回 系统剪贴板当前的内容: Text1.SelText = Clipboard.GetText() 其中,Clipboard是VB提供的剪贴板对象。 菜单控件数组Edi的Click事件代码为: Private Sub edi_Click(Index As Integer) i = Index Select Case i Case 0 ' 剪切 Clipboard.SetText Text1.SelText Text1.SelText = "" Case 1 ' 复制 Clipboard.SetText Text1.SelText Case 2 ' 粘贴 Text1.SelText = Clipboard.GetText() Case 3 ' 删除 Text1.SelText = "" End Select End Sub 程序运行结果如图9-8所示。 3. 菜单项的可用与不可用 VB设计的菜单可以根据程序的运行状态动态地进行调整。 当菜单项所指示的操作不适合当前的环境时,可以暂时将 其关闭,不让用户选择该菜单项,也可以干脆把它隐藏起 来,就像根本没有这个菜单项一样,等到条件成熟时,再 重新显示被隐藏的菜单项。 【例9-4】改编例9-3的程序,使得当文本中没有被选中的内 容时,剪切、复制和删除等功能被关闭(菜单项呈灰色)。 一旦选中某些文本后,剪切、复制和删除等功能就可以被 使用,如图9-10所示。 图9-10 菜单项的可用与不可用 只需在例9-3的基础上增加“编辑”菜单项Edit的Click事件代码为: Private Sub Edit_Click() edi(0).Enabled = IIf(Text1.SelLength = 0, False, True) edi(1).Enabled = IIf(Text1.SelLength = 0, False, True) edi(3).Enabled = IIf(Text1.SelLength = 0, False, True) End Sub 【例9-5】在例9-3的基础上改变程序,隐藏剪切、复制和删除 菜单项。 隐藏菜单项的办法也是很简单的。在例9-3中,编写文本框 Text1的事件代码。 键抬起(KeyUp)事件代码为: Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer) edi(0).Visible = IIf(Text1.SelLength = 0, False, True) edi(1).Visible = IIf(Text1.SelLength = 0, False, True) edi(3).Visible = IIf(Text1.SelLength = 0, False, True) End Sub 鼠标键抬起(MouseUp)事件代码为: Private Sub Text1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) edi(0).Visible = IIf(Text1.SelLength = 0, False, True) edi(1).Visible = IIf(Text1.SelLength = 0, False, True) edi(3).Visible = IIf(Text1.SelLength = 0, False, True) End Sub 程序运行结果如图9-11所示。 图9-11 隐藏和重现菜单项 9.1.2 弹出式菜单 弹出式菜单能以灵活的方式为用户提供更加便利的操 作,它可以根据用户单击鼠标右键时的位置,动态地调 整菜单项的显示位置,同时也改变菜单项显示内容,因 此弹出式菜单又称为“上下文菜单”或“快捷菜单”。 设计弹出式菜单仍然使用VB提供的菜单编辑器,只要 把 某 个 菜 单 设 置 成 隐 藏( 即“ 可见 ” 栏Visible属性为 False)就可以了。 实际上,不管是在窗口顶部菜单条上显示的菜单,还 是隐藏的菜单,都可以用PopupMenu方法把它们作为快 捷菜单在程序运行期间显示出来,语法为: [〈窗体名〉.] PopupMenu 〈菜单名〉[, flags [,x [, y [, boldcommand ]]]] 说明: ① 省略〈窗体名〉时,将打开当前窗体的菜单。 ②〈菜单名〉是指通过菜单编辑器设计的菜单(至少有一 个子菜单项)的名称(Name)。 ③ Flags参数为一些常量数值的设置,包含位置及行为两 个指定值,如表9-5、表9-6所示。两个常数可以相加或以Or 相连。 表9-5 位置常数 0(默认) 4 8 位置常数 说 明 菜单左上角位于X 菜单上框中央位于X 菜单右上角位于X 表9-6 行为常数 行为常数 0(默认) 2 说 明 菜单命令只接受右键单击 菜单命令可接受左、右键单击 ④ Boldcommand参数可以指定在显示的弹出式菜单中想 以粗体字出现的菜单项名称。在弹出式菜单中只能有一个 菜单项被加粗。 ⑤ 为创建一个不显示在菜单栏里的菜单,可在设计时使 顶级菜单项目为不可见(保证在菜单编辑器里的“可见” 复选框没有被选上)。当VB显示一个弹出式菜单时,指定 的顶级菜单的Visible属性会被忽略。 【例9-6】在例9-3中实现弹出式菜单,如图9-12所示。 首先在菜单编辑器中将“文件”菜单的“可见”栏中的 对号取消,如图9-13所示。 图9-12 自定义的弹出式菜单 图9-13 将菜单项的可见属性Visible设为False 增加窗体的MouseDown事件代码为: Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 2 Then PopupMenu Files, 6 End If End Sub 在程序运行时,右键单击窗体,即可弹出快捷菜单,如 图9-12所示。 另外,在VB的文本框中,即使不编程也可以得到一个弹 出式菜单。例如在文本编辑器中,单击鼠标右键即可得到 如图9-14所示的弹出式菜单。 图9-14 在VB文本框中不用编程的弹出式菜单 9.2 工具栏设计 工具栏同样以其直观、快捷的特点出现在各种应用程序中 ,事实上工具栏已经成为Windows应用程序的标准功能。它 使用户不必在一级级的菜单中去搜寻需要的命令,给用户带 来比菜单更为快捷的操作。 在VB中可以通过手工方式和使用工具栏控件(Toobar) 两种方法建立工具栏。 9.2.1 用手工方式制作工具栏 用手工方式制作工具栏,其实就是设计一个放置一些工具 按钮的图片框。手工制作工具栏的一般步骤如下: ① 在窗体中添加一个图片框(作为工具按钮的容器),并通过设置 图片框的Align属性来控制工具栏(图片框)在窗体中的位置。当改变 窗体的大小时,Align属性值非0的图片框会自动地改变大小以适应窗体 的宽度或高度。 ② 选定图片框,在图片框中添加任何想在工具栏中显示的控件。通常 使用的控件有:命令按钮、图形方式的单项钮和复选框按钮、下拉列表 框等。 ③ 设置控件的属性。通常在工具按钮上通过不同的图像来表示对应的 功能,还可以设置按钮的ToolTipText属性为工具按钮添加工具提示。 ④ 编写代码。由于工具按钮通常用于提供对其他(菜单)命令的快捷 访问,所以一般都是在其Click事件代码中调用对应的菜单命令。 【例9-7】在例9-3的文本编辑器中增加一个自定义的工具栏,如图9-15 所示。 图9-15 带有工具栏的文本编辑器 在例9-3的基础上作如下修改: ① 修改应用程序用户界面。在窗体上增加一个图片框 Picture1 , 然 后 在 图 片 框 中 增 加 一 个 命 令 按 钮 数 组 Command1(0)~Command1(2)。 ② 设置新增对象属性,见表9-7。 表9-7 新增对象的属性设置 对 象 Picture1 属 性 Align 属 性 值 1—Align Top 说 明 图片框位于窗体的顶部 清空 Command1() Caption Style 1—Graphical Picture 分 别 为 New.bmp 、 Open.bmp 、 Save.bmp 图形按钮 建立用户界面及设置对象属性后的界面,如图9-16所示。 图9-16 建立用户界面 ③ 修改及编写程序代码。修改窗体的事件代码为: Private Sub Form_Resize() With Text1 .Left = 0 .Top = Picture1.Height .Height = Form1.ScaleHeight – Picture1.Height .Width = Form1.ScaleWidth End With End Sub 编写命令按钮数组Command1的Click事件代码为: Private Sub Command1_Click(Index As Integer) File_Click (Index) End Sub 9.2.2 使用Toolbar控件与ImageList控件 使用工具栏控件(Toolbar)可以使应用程序的工具栏更 具标准化和更显专业性。 工具栏控件是VB专业版和企业版所特有的ActiveX控件, 可以将其添加到工具箱中,以便在工程中使用。操作方法 为: ① 在主菜单中选择“工程”,在“工程”下拉菜单中选 择“部件”,即可打开“部件”对话框。 ② 选中Microsoft Windows Common Controls 6.0,用鼠 标单击“确定”按钮,即可在工具箱中增加一组控件。其 中用来创建工具栏的控件是Toolbar控件与ImageList控件, 如图9-17所示。 图9-17 Toolbar控件与ImageList控件 1. Toolbar控件 用鼠标双击Toolbar控件,它将自动加入窗体并出现在窗 体的顶部(也可单击控件后在窗体中画出控件)。通过设 置图片框的Align属性可以控制工具栏在窗体中的位置。当 改变窗体的大小时,Align属性值非0的Toolbar控件会自动 地改变大小以适应窗体的宽度或高度。 用鼠标右键单击窗体上的Toolbar控件,在弹出的快捷菜 单中选择“属性”,打开“属性页”对话框,如图9-18所 示。 图9-18 Toolbar的“属性页”对话框中的“通用”选项卡 “通用”选项卡中的“图像列表”属性将被用来与 ImageList控件建立关联。此时列表为空,是因为尚未将 ImageList控件添加到窗体中的缘故。 用鼠标选择“按钮”选项卡,如图9-19所示。 图9-19 “按钮”选项卡 其中的各项功能说明如下: ① 插入与删除按钮:在Button(按钮)集合中添加或删 除元素。通过Button集合可以访问工具栏中的各个按钮。 ② 索引与关键字:工具栏中的按钮通过Button集合进行 访问,集合中的每个按钮都有惟一的标识,索引(Index属 性)和关键字(Key属性)就是这个标识。索引为整型,关 键字为字符串型,访问按钮时可以引用二者之一。 ③ 标题与描述:标题(Caption属性)是显示在按钮上的 文字。描述是按钮的说明信息。 ④ 值(Value属性)决定按钮的状态,0-tbrUnpressed为 弹起状态,1-tbrPressed为按下状态。 ⑤ 样式(Style属性)决定按钮的行为特点,并且将影响 按钮的功能,如表9-8所示。 表9-8 值 符号常数 Style属性值及其意义 说 明 0 tbrDefault 缺省按钮。按钮是一个规则的下压按钮 1 tbrCheck 复选按钮。具有按下、放开两种状态。当按钮代表的功能是某种开关 类型时,可使用复选样式 2 tbrButtonGro 单选钮组。当一组按钮功能相互排斥时,可以使用单选钮组样式。注 up 意:同一时刻只能按下一个按钮,但所有按钮可能同时处于抬起状态 3 tbrSeparator 4 tbrPlaceholde 占位符。按钮在外观和功能上像分隔符,但具有可设置的宽度。占位 r 符样式按钮的功能如同“哑”按钮:该按钮的作用是在Toolbar控件中 占据一定位置,以便显示其它控件(如ComboBox控件或ListBox控件) 5 tbrDropdown 下拉式按钮。可以建立下拉菜单 分隔符。按钮的功能是作为有8个像素的固定宽度的分隔符。分隔符样 式的按钮可以将不同组或不同类的按钮分隔开,例如将单选钮分组 ⑥ 宽度(Width属性):当Style属性为4时,可设置按钮 的宽度。 ⑦ 图像(Image属性):按钮上显示的图片在ImageList 控件中的编号。 ⑧ 工具提示文本(ToolTipText属性):程序运行时,当 鼠标指向按钮时显示的说明文字。 2. ImageList控件 工具栏按钮本身没有Picture属性,不能像其他控件那样 用Picture属性直接添加按钮上显示的图片。为此,VB专门 提供了图像列表控件ImageList,在它的帮助下可以实现工 具栏按钮图片的载入。 利用ImageList控件为Toolbar添加图片的具体操作过程如 下: ① 向Toolbar控件所在的窗体中添加ImageList控件。 ② 用鼠标右键单击窗体中的ImageList控件,在弹出的快捷 菜单中选择“属性”,打开“属性页”对话框,如图9-20所示 。 图9-20 “属性页”对话框 ③ 单击“图像”选项卡中的“插入图片”按钮,在弹出 的“选定图片”对话框中找到所需要的图片,单击“打开” 按钮即可将图片添加到ImageList控件中。重复上述操作直 到得到所有需要的图片。 ④ 建 立 Toolbar 控 件 与 ImageList 控 件 的 关 联 : 打 开 Toolbar控件的属性页对话框,在“通用”选项卡的“图像 列表”选项中选择ImageList控件名,即可建立两者间的关 联。 在程序运行时,下述代码也可建立两者间的关联: Private Sub Form_Load() Toolbar1.ImageList = ImageList1 End Sub ⑤ 为工具栏按钮载入图片。一旦Toolbar与ImageList 控件建立了关联,Toolbar属性页对话框的“按钮”选项 卡中的“图像”选项变为有效。只需在其中输入 ImageList图像库中图像的索引号即可将对应的图片添加 到按钮上。 下面我们使用工具栏控件来重新设计例12-6中的文本 编辑器。 【例9-8】在例9-7的文本编辑器中改用工具栏控件设计新 的工具栏。 在例9-7的基础上作如下修改: ① 修改应用程序用户界面。将窗体上的图片框及其中 的命令按钮删去,另外增加一个工具栏控件Toolbar1和 一个图像列表控件ImageList1。并将Toolbar1的Align属 性改为1 – vbAlignTop。 ② 通过“属性页”对话框来设置工具栏控件与图像列表 控件的属性。首先选中图像列表控件ImageList1,用鼠标 单击属性窗口“(自定义)”项右边的按钮,打开“属性 页”对话框,并依次从Graphic\Bitmaps\Tlbr_w95目录中 选取图片文件New.bmp、Open.bmp、Save.bmp,如图9-21。 单击“确定”按钮关闭“属性页”对话框。 然后选中工具栏控件Toolbar1,打开“属性页”对话框。 在“通用”选项卡中将“图像列表”(ImageList)属性改 为ImageList1,建立与图像列表框的关联。在“按钮”选 项卡中依次插入如表9-9所述按钮,插入过程如图9-22所示。 图9-21 向图像列表控件ImageList1添加图像 表9-9 对 象 Buttons(1) 属 性 按钮的属性设置 属性值 说 明 索引 1 样式 3—tbrSeparator 索引 2 关键字 New 样式 0—tbrDefault 普通按钮 图像 1 连接第1个图片 索引 3 关键字 Open 样式 0—tbrDefault 普通按钮 图像 2 连接第2个图片 索引 4 关键字 Save 样式 0—tbrDefault 普通按钮 图像 3 连接第3个图片 Buttons(2) Buttons(3) Buttons(4) 先添加一个分隔符,使工具栏按钮从屏幕左边 缩进一点 单击“确定”按钮,关闭“属性页”对话框。添加了工 具栏的窗体如图9-23。 图9-22 建立Toolbar1与图像列表框的关联 图9-23 建立用户界面后 ③ 修改及编写程序代码。修改窗体的事件代码为: Private Sub Form_Resize() With Text1 .Top = Toolbar1.Height .Left = 0 .Height = Form1.ScaleHeight – Toolbar1.Height .Width = Form1.ScaleWidth End With End Sub 编写工具栏按钮的事件代码为: Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button) n = Button.Index If n = 2 Or n = 3 Or n = 4 Then File_Click (n – 2) End Sub 程序运行结果如图9-24所示。 图9-24 利用控件建立工具栏 9.3 习题 9.1 设计菜单程序。 如图9-25所示,当文本框中没有 任何文字时,“字号”菜单中的各项均为灰色显示,表 示当前不可用。当用户向文本框中输入了文字后选择某 菜单项,可将文字大小设为对应值,并在当前活动项的 前面加一个“√”。如果用户选择了“14”项时,“10”将 被隐藏,并添加菜单项“16”,其功能与其他菜单项相同 。当用户重新选择了“12”时,“16”将被删除,并恢复 “10”的可见性,即文字最大为16,最小为10,菜单中只 能同时存在3个选项。 图9-25 设计文本编辑菜单 9.2 为文本框增加一个弹出式菜单,该菜单中包含有“红 色”、“蓝色”和“绿色”3个选项,单击相应的选项后可以 改变文本框中文字的颜色。 9.3 为文本框添加一个简单的工具栏。通过工具栏中的按 钮,可以改变文本字体的大小。 9.4 编写程序设计个人信息查询工具。要求使用菜单来控 制数据的编辑、查找,完成按姓名查找、按工资范围查找、 按工作证号查找。查找时使用模糊查找,将满足条件的记录 显示在列表框中。