第四章 界面设计 本章学习目标: 窗体对象是Visual Basic .NET应用程序的基本构造模块,是运行应用程序时与用户交互操作的实际窗口。可用来向用户显示信息并接受用户输入的信息。窗体可以是标准窗口、多文档界面(MDI)窗口、对话框或图形化例程的显示界面。窗体有自己的属性、事件和方法,用于控制其外观和行为。通过学习对话框、菜单、进度条、跟踪条、工具提示、工具栏、状态栏和常用对话框控件掌握界面设计的基本方法和步骤,在此基础上认识多文档界面MDI设计的一般过程。
本章学习要点: 掌握窗体界面设计常用控件的基本属性和基本方法 掌握常用事件的用法 对面向对象编程和事件驱动的编程方式有所了解 进一步熟悉利用Visual Basic .NET设计应用程序的基本思路及操作步骤。
4.1通用对话框 对话框用于与用户交互和检索信息。简单地说,对话框是FormBorderStyle属性设置为 FixedDialog的窗体。在Visual Studio中,可以构造自己的自定义对话框。可以根据自己的具体需要,向自定义对话框中添加诸如Label、Textbox和Button之类的控件。
4.1.1打开与保存文件对话框 打开文件对话框(OpenFileDialog)是预设的有模式对话框之一,与Windows打开对话框有相同样式。 保存文件对话框(SaveFileDialog)显示的是系统的“另存为”对话框,其控件属性与OpenFileDialog一样。 打开与保存文件对话框具体用法见例4.1,其相应程序界面设计及运行结果如图4.1-图4.4所示。
图4.1 添加按钮和RichTextBox 图4.2 打开文件对话框
图4.4 保存文件对话框 图4.3 显示结果
4.1.3页面设置对话框 4.1.2 打印文档控件 页面设置对话框(PageSetupDialog)主要对打印文件的页面属性进行设置。 打印文档(PrintDocument)控件是一个提供文档来源的控件。通过为“打印预览对话框”、“页面设置对话框”和“打印对话框”设置Document属性值为PrintDocument1,可设置要打印的文档。其常用的事件有在调用Print时在打印文档的第一页之前发生的BeginPrint事件、在打印完文档的最后一页时发生的EndPrint事件和当需要为当前页打印的输出时发生的PrintPage事件等。 4.1.3页面设置对话框 页面设置对话框(PageSetupDialog)主要对打印文件的页面属性进行设置。
4.1.4 打印预览对话框 打印预览对话框(PrintPreviewDialog)控件用于显示PrintDocument在打印时的外观。可在基于Windows的应用程序中使用它作为简单的解决方案,而不用配置自己的对话框。该控件包含打印、放大、显示一页或多页和关闭此对话框的按钮。该控件的主要属性是Document,用于设置要预览的文档。文档必须是PrintDocument对象。若要通过窗体菜单或按钮的单击事件显示此对话框,必须调用它的ShowDialog方法,其具体的形式为PrintPreviewDialog1.ShowDialog()。将UseAntiAlias 属性设置为true消除锯齿可使文字显得更齐整平滑,但也会使显示更慢。
4.1.5 打印对话框 打印对话框PrintDialog控件是一个预先配置的对话框,可在基于Windows的应用程序中用于选择打印机、选择要打印的页以及确定其他与打印相关的设置。将该控件用作选择打印机和打印相关设置的简单解决方案。可使用户能够打印文档的很多部分:全部打印、打印选定的页范围或打印选定内容。PrintDialog 控件从 CommonDialog 类继承。 打印对话框具体用法见例4.2 ,其相应程序结果如图4.5 所示。
图4.5 单击窗体打印按钮显示结果
PrintDialog控件主要属性如下: 属性名称 说明 AllowCurrentPage 指示是否显示“当前页”选项按钮 AllowPrintToFile 指示是否启用“打印到文件”复选框 AllowSelection 指示是否启用“选择”选项按钮 AllowSomePages 指示是否启用“页”选项按钮 Document 获取PrinterSettings 的PrintDocument PrinterSettings 获取或设置对话框修改的打印机设置 PrintToFile 指示是否选中“打印到文件”复选框 ShowHelp 指示是否显示“帮助”按钮 ShowNetwork 指示是否显示“网络”按钮
4.1.6字体对话框 字体对话框FontDialog显示的是系统自带的标准“字体”对话框,用户可以使用它选择字体,更改字体显示方式,例如粗细和大小和颜色 。
字体对话框主要属性: 属性 说明 Color 获取或设置选定字体的颜色。 Font 获取或设置选定的字体。 属性 说明 Color 获取或设置选定字体的颜色。 Font 获取或设置选定的字体。 MaxSize 获取或设置用户可选择的最大磅值。 MinSize 获取或设置用户可选择的最小磅值。 ShowApply 指示对话框是否包含“应用”按钮,默认值为 false。 如果对话框包含“应用”按钮,则为true。 ShowColor 该值指示对话框是否显示颜色选择,默认值为 false。 如果对话框显示颜色选择,则为true。
4.1.7颜色对话框 颜色对话框ColorDialog是一个预先配置的对话框,它允许用户从调色板选择颜色以及将自定义颜色添加到该调色板。此对话框与在其他基于Windows的应用程序中看到的用于选择颜色的对话框相同。可在基于 Windows 的应用程序中使用它作为简单的解决方案,而不用配置自己的对话框。此对话框中选择的颜色在Color属性中返回。如果AllowFullOpen属性设置为false,则将禁用“定义自定义颜色”按钮,并且用户只能使用调色板中的预定义颜色。如果SolidColorOnly属性设置为true,则用户无法选择颜色。若要显示此对话框,必须调用运行通用对话框的ShowDialog方法。
颜色对话框常用属性: 名称 说明 AllowFullOpen 指示用户是否可以使用该对话框定义自定义颜色。 名称 说明 AllowFullOpen 指示用户是否可以使用该对话框定义自定义颜色。 AnyColor 指示对话框是否显示基本颜色集中可用的所有颜色。 Color 获取或设置用户选定的颜色。 CustomColors 获取或设置对话框中显示的自定义颜色集。 FullOpen 指示用于创建自定义颜色的控件在对话框打开时是否可见。 ShowHelp 指示在颜色对话框中是否显示“帮助”按钮。 SolidColorOnly 指示对话框是否限制用户只选择纯色。
设置已打开的文本文件的字体和颜色方法可参见例4.3及图4.6等。 图4.6 添加字体及颜色按钮
4.2 菜单的使用和动态菜单 应用程序中用户界面的一个至关重要的部分是菜单栏,通过菜单对各种命令按钮功能进行分组,使用户能够更加方便、直观地访问这些命令。菜单由若干个命令、分隔条、子菜单标题等菜单项组成。 在实际的应用中,菜单可分为两种基本类型:下拉式菜单和上下文菜单。下拉式菜单一般通过单击菜单栏中菜单标题(如“文件”、“编辑”等)的方式打开,如图4.10所示。上下文菜单(或称弹出式菜单)则通过用鼠标右键单击某一区域的方式打开,如图4.11所示。
图4.11上下文菜单 图4.10下拉式菜单
4.2.1 下拉菜单设计 可以使用MenuStrip 控件创建支持高级用户界面和布局功能的常用菜单,如创建下拉菜单。
图4.12利用菜单设计器设计下拉菜单 图4.13在下拉菜单的菜单项之间设立分隔线
4.2.2上下文菜单设计 使用Visual Basic.NET,我们不仅能够设计出下拉菜单,也能设计出上下文菜单。上下文菜单设计的一般步骤如下: (1)在项目中,先从“工具箱”中的“菜单和工具栏”选项卡中往Form1窗体中拖入一个MenuStrip控件,创建下拉菜单“文件”和“编辑”,再从“工具箱”中的“菜单和工具栏”选项卡向Form1窗体中拖入(或双击)一个ContextMenuStrip控件,名称为ContextMenuStrip1,用于创建上下文菜单。 (2)单击窗体下方的“ContextMenuStrip1”控件,在菜单栏出现如图4.14(a)所示的提示信息。
注:在VisualBasic.NET的菜单设计中“&”号的作用是为菜单设定快捷键(执行时通过按Alt键和相应的字母即可)。 (3)在图4.14(a)的“ContextMenuStrip”下的“请在此处输入”菜单录入文本框中,按由上至下顺序输入“拷贝(&C)”、“剪切(&X)”、“粘贴(&V)”后,此时设计后的菜单如图4.14(b)所示。 注:在VisualBasic.NET的菜单设计中“&”号的作用是为菜单设定快捷键(执行时通过按Alt键和相应的字母即可)。 (4)选Form1的属性选项卡,设定Form1的“ContextMenuStrip”的属性值为“ContextMenuStrip1”,从而将Form1与ContextMenuStrip1建立关联。 对其他控件“ContextMenuStrip”属性,只需把控件的“ContextMenuStrip”属性值设置为设计好的上下文菜单名称,这样当在此控件中单击鼠标右键,就会弹出对应的上下文菜单。
图4.14设计上下文菜单
4.2.3 动态菜单 Visual Studio.NET提供的菜单能够根据当前的项目类型自动产生,有些安全性要求比较高的程序 , 应当根据登录用户类型动态产生相应权限的菜单 , 非权限内的操作菜单要么被隐藏 , 要么处于无效状态。用法见例4.5及图4.15等。
图4.15用户登录对话框
4.3工具栏与工具提示 4.3.1工具栏 在窗体应用程序中可使用ToolStrip控件来创建工具栏。ToolStrip控件也提供丰富的设计体验,包括就地激活和编辑、自定义布局等功能。
ToolStrip是ToolStripButton、ToolStripComboBox、ToolStripSplitButton、ToolStripLabel、ToolStripSeparator、ToolStripDropDownButton、ToolStripProgressBar和ToolStripTextBox等对象的容器。 ToolStripButton表示包含文本和图像的可选的ToolStripItem。 可使用ToolStripButton创建一个支持文本和图像的工具栏按钮。 可使用ToolStripItem.ImageAlign和ToolStripItem.TextAlign属性获取或设置ToolStripButton图像和文本的位置。
用ToolStrip创建工具栏方法可参见例4.6及其相应的图4.19 至图4.21等。 图4.20添加图标 图4.19构建工具栏
图4.21“选择资源”对话框中导入图标
4.3.2 工具提示 ToolTip控件表示一个长方形的小弹出窗口,该窗口在用户将指针悬停在某控件上时显示有关该控件用途的简短说明。此控件通常用来向用户提示控件的预期用途。例如,可以为接受名称的TextBox 控件指定工具提示文本,同时指定要键入到控件中的名称的格式。除了提供提示外,还可使用 ToolTip 类提供运行时状态信息。例如,当用户将指针移动到显示 Internet 连接状态的 PictureBox 控件上时,可以使用ToolTip类显示连接速度和线路质量数据。ToolTip可在任何容器内使用。ToolTip 类提供了属性和方法以修改工具提示的默认行为和外观。
ToolTip 控件的重要属性有: (1) lnitialDelay 属性 鼠标放在控件上方多少时间显示工具提示,默认值为500毫秒。 (2) AutoPopDelay 属性 指针在包含指定工具提示文本的控件内保持静止时,工具提示保持多久才消失,默认值为5000毫秒。 (3) ReshowDelay 属性 鼠标指针从一个控件移到另一个控件时,后面的“工具提示”窗口出现前必须经过多长时间。
(4) AutomaticDelay 属性 工具提示的自动延迟。它事实上是用来设置前三个值的,一旦设置了AutomaticDelay,则InitialDelay会自动设为等于AutomaticDelay属性的值;AutoPopDelay会自动设为等于 AutomaticDelay属性值的10倍;而ReshowDelay会自动设为 AutomaticDelay属性值的五分之一。当然,也可以手动设置前面三个属性。 (5) Show Always属性 指示“工具提示” 窗口在其父控件不活动时是否显示。 (6) Active 属性 如果要禁用所有工具提示文本以便不在应用程序中显示它,可以使用Active属性。 创建一个ToolTip类的实例见例4.7 及图4.23。
4.4状态栏、进度条和跟踪条 4.4.1状态栏 用StatusStrip 控件可以显示正在 Form 上查看对象的相关信息或与该对象在应用程序中的操作相关的上下文信息。 通常StatusStrip 控件由 ToolStripStatusLabel对象组成,每个这样的对象都可以显示文本、图标或同时显示这两者。 StatusStrip重要的伴生类包括:ToolStripDropDownButton、ToolStripSplitButton 和 ToolStripProgressBar 等控件 。
Visual Studio.NET中提供了StatusStrip的“项集合编辑器”用于添加、移除和重新排序 StatusStrip 的ToolStripItem 控件以及查看和设置 StatusStrip及ToolStripItem属性。通过在设计器中右击 StatusStrip控件并从快捷菜单中选择“编辑项”,打开StatusStrip 的“项集合编辑器”,如图4.24所示。
图4.24 StatusStrip的项集合编辑器
4.4.2 进度条 ProgressBar是表示执行进度的控件。该控件以三种样式中的一种指示较长操作的进度: (1)从左向右分步递增的分段块。 (2)从左向右填充的连续栏。 (3)以字幕方式在 ProgressBar 中滚动的块。
进度条ProgressBar控件的重要属性有: (1) Maximum 控件范围的最大值 (2) Minimum 控件范围的最小值 (3) Step 每次变化的步长 (4) Value 表示应用程序在完成操作的过程中的进度位置 (5) Style 确定进度条的样式
4.4.3 跟踪条 跟踪条TrackBar控件可生成一个标准的Windows跟踪条,可以通过各种属性值配置跟踪条,Value 属性指示滑块的位置;通过设置Minimum属性指定该范围的下限;设置Maximum属性指定该范围的上限;通过TickFrequency属性获取或设置一个值,该值指定控件上绘制的刻度之间的增量;LargeChange属性定义在滚动框的任一侧单击鼠标时对Value属性进行增减的量。跟踪条可以水平显示或垂直显示;通过SmallChange属性获取或设置当滚动框短距离移动时对 Value 属性进行增减的值;通过LargeChange属性获取或设置一个值,当滚动框长距离移动时向 Value 属性加上该值或从中减去该值;Orientation 属性指示跟踪条在水平方向还在垂直方向。
进度条和跟踪条设置程序用法见例4.8及图4.26 等所示,而演示菜单及在状态栏StatusStrip 控件中显示日期、进度信息的方法见例4.9及图4.27 等。 图4.26进度条和跟踪条设置程序结果
图4.27菜单栏和状态栏等的使用
4.5 多文档界面MDI设计 4.5.1 创建MDI父窗体及其子窗体 Windows应用程序的工作界面大致分为3类:多文档界面(MDI,Multiple Document Interface)、单文档界面(SDI,Single Document Interface)和资源管理器风格界面。 多文档界面(MDI)应用程序的基础是MDI父窗体。MDI父窗体是包含MDI子窗体的窗体,子窗体用于用户与应用程序进行交互。MDI允许创建在单个容器窗体中包含多个窗体的应用程序。
1、创建MDI父窗体的方法: 新建一个项目,默认窗体为Form1,在窗体的属性窗口中将IsMdiContainer属性设置为True 。 2、创建子窗体的步骤: (1) 在“视图”菜单中单击“解决方案资源管理器”,在出现的“解决方案资源管理器”窗口中,右击项目名称,在弹出的快捷菜单中选择“添加”,在相应的级联菜单中单击“Windows窗体”,为该项目添加一个窗体,将其名称属性改为frmchild。 (2) 选中MDI父窗体Form1,将下列显示子窗体的代码添加到MDI父窗体Load事件中: Dim frmfc As New frmchild frmfc.MdiParent = Me frmfc.Show()
4.5.2 确定活动子窗体和排列子窗体 若要指定活动的窗体,可使用ActiveMDIChild属性,此属性返回具有焦点的子窗体或返回最近活动的子窗体。而ActiveControl属性返回在活动的子窗体上有焦点的控件。 LayoutMDI方法可以使打开的多个子窗体排列整齐。根据LayoutMDI方法调用不同的取值可以产生不同窗体的排列方式。 该方法以MDILayout属性值为参数。属性有4种不同取值,分别如下: ArrangeIcons属性: 图标排列。 Cascade属性: 层叠排列。 TileHorizontal属性: 水平平铺。 TileVertical属性: 垂直平铺。
4.5.3 设计一个MDI窗体程序 建立一个Windows窗体应用程序, 程序建立的窗体默认为SDI样式,在“属性”中找到 IsMdiContainer属性,将它的值设为True,如图4.30所示,使其变成MDI样式的窗体。
图4.30 设置IsMdiContainer 属性
设计一个 MDI 窗体程序方法见例4.10。 按F5运行程序,出现一个MDI窗体,如果单击菜单中的“新建子窗体”,在主窗体中就会有子窗体出现,如图4.32 所示;如果单击菜单中的“水平平铺”,则子窗体如图4.33所示;垂直平铺的效果如图4.34所示。应当注意,在构建子窗体的时候,是由子窗体指定父窗体。
图4.33水平平铺 图4.34垂直平铺 图4.32子窗体出现