《VisualC#.NET程序设计实用教程》内容简介界面设计是Windows应用程序的重要环节,直接影响程序的外观效果和可操作性。本章主要介绍下拉式菜单、弹出式菜单、工具栏、状态栏等,与界面设计密切相关的控件以及多文档界面程序的设计。目录9.1菜单、工具栏与状态栏9.2对话框9.3多文档操作本章小结9.1菜单、工具栏与状态栏菜单、工具栏和状态栏是用户界面的重要组成部分,向用户展示了一个程序的大致功能和风格。除了极其简单的应用程序外,大部分用应用程序都在窗口顶部提供一个方便用户与应用程序进行交互的菜单栏和工具栏,在窗口底部提供一个显示程序信息的状态栏。9.1.1菜单菜单是用户界面极其重要的组成部分,编程人员可以根据需要定制各种风格的菜单。菜单按使用方式有下拉式菜单和弹出式菜单两种。菜单的设计主要涉及三个类:ContextMenuStrip、MenuStrip和ToolStripMenuItem,它们分别封装了对弹出式菜单、下拉式菜单及菜单项的定义。1.下拉式菜单MenuStrip(菜单栏)控件用于创建下拉式菜单。下拉式菜单,也称主菜单、菜单栏,一般位于窗口的顶部,由多个菜单项组成。每个菜单项可以是应用程序的一条命令,也可以是其他子菜单项的父菜单。9.1.1菜单1.下拉式菜单(1)设计菜单的常用操作①创建菜单栏。工具箱中双击MenuStrip控件即可创建菜单栏,但控件本身并不存在于窗体之上,而是在窗体设计器下方的组件区中。单击组件区中的MenuStrip控件,将会在窗体的标题栏下面看到文本“请在此处键入”。第一个创建的MenuStrip控件,会自动通过窗体的MainMenuStrip属性绑定到当前窗体,成为其主菜单栏。提示:MenuStrip控件只是一个容纳菜单项的容器,本身没有常用的事件和方法,较常用的属性是Items,可以通过项集合编辑器对菜单项进行管理,如添加或删除菜单项、调整菜单项的次序等。菜单栏的具体功能由各个菜单项实现,所以主要使用菜单项的属性、方法和事件。9.1.1菜单1.下拉式菜单(1)设计菜单的常用操作②创建菜单项。菜单栏由多个菜单项组成,选中组件区中的MenuStrip控件,在窗体标题栏下面的“请在此处键入”文本处单击并键入菜单项的名称(如“文件”),将创建一个菜单项,其Text属性由键入的文本指定。此时,在该菜单项的下方和右方分别显示一个标注为“请在此键入”区域,可以选择区域继续添加菜单项。1.下拉式菜单(1)设计菜单的常用操作③创建菜单项之间的分隔符。常用方法有四种,如下:方法1:把鼠标移动到“请在此键入”区域,会发现该区域的右侧出现一个下拉箭头,单击该箭头,会出现一个下拉列表,如图10.2所示。单击“Separator”,则该菜单项被创建为一个分隔符。方法2:直接在“请在此键入”区域输入“-”,则该菜单项被创建为一个分隔符。方法3:单击“请在此键入”区域,在属性窗口设置其Text属性为“-”,则该菜单项被创建为一个分隔符。方法4:如果要在某个菜单项之前插入分隔符,在该菜单项上单击鼠标右键,在弹出的快捷菜单中选择“插入|Separator”命令,即可将一个分隔符插入到当前菜单项的上方。9.1.1菜单9.1.1菜单1.下拉式菜单(1)设计菜单的常用操作④创建菜单项的访问键。可以在菜单项名称中的某个字母前加“&”,将该字母作为该菜单项的访问键。例如,输入菜单项名称为“文件(&F)”,F就被设置为该菜单项的访问键,这一字符会自动加上一条下划线。程序运行时,按Alt+F就相当于单击“文件”菜单项。⑤创建菜单项的快捷键。选中要设置快捷键的菜单项,在属性窗口中设置ShortcutKeys属性即可。该属性默认值值为None,表示没有快捷键。⑥设置菜单项的图标。选中要设置图标的菜单项,在属性窗口中设置Image属性即可。9.1.1菜单1.下拉式菜单(1)设计菜单的常用操作⑦移动菜单项。选中要移动的菜单项,用鼠标拖动到相应的位置即可。⑧插入菜单项。如果要在某个菜单项之前插入一个新的菜单项,右击该菜单项,在弹出式菜单中选择“插入”即可。⑨删除菜单项。右击要删除的菜单项,在弹出式菜单中选择“删除”即可。⑩编辑菜单项。如果要编辑一个菜单项,先选中该菜单项再单击就可以进入编辑状态,然后添加、删除或修改文字即可。9.1.1菜单1.下拉式菜单(2)运行时控制菜单的常用操作在应用程序中,菜单常常会因执行条件的变化而发生一些相应的变化,主要体现在菜单项的有效性、可见性和选择性方面。①有效性控制。菜单项的Enabled属性用来决定菜单项是否有效。在默认情况下,菜单项的Enabled属性的值为true,即菜单项是有效的。如果将该属性设置为false,则将该菜单项设置为无效(不可用)。可以在设计时通过“属性”窗口中设置Enabled属性,也可以在运行时通过代码来设置Enabled属性,从而控制菜单项是否有效。9.1.1菜单1.下拉式菜单(2)运行时控制菜单的常用操作【菜单项的有效性、可见性和选择性】②可见性控制。菜单项的Visible属性用来决定菜单项是否可见。在默认情况下,菜单项的Visible属性的值为true,即菜单项是可见的。如果将该属性设置为false,则该菜单项运行时不显示。可以在设计时通过“属性”窗口中设置Visible属性,也可以在运行时通过代码来设置Visible属性,从而控制菜单项的隐藏或显示。提示:隐藏菜单项的同时必须禁用菜单项,因为仅靠隐藏无法防止通过快捷键访问菜单命令。9.1.1菜单1.下拉式菜单(2)运行时控制菜单的常用操作【菜单项的有效性、可见性和选择性】③选择性控制。菜单项的Checked属性用来决定菜单项是否处于选中状态。在默认情况下,菜单项的Checked属性的值为false,即菜单项未选中。如果将该属性设置为true,则该菜单项处于选中状态,其左边显示“√”标记。可以在设计时通过属性窗口中设置Checked属性,也可以在运行时通过代码来设置Checked属性,从而控制菜单项是否选中。9.1.1菜单1.下拉式菜单(3)菜单项的常用属性前面介绍的常用操作中,已经用到了菜单项的几个属性,如Text、ShortcutKeys、Enabled、Visible、Checked等。(4)菜单项的常用事件菜单栏通过单击菜单项与程序进行交互,一般通过相应菜单项的Click事件来实现相应的功能。单击某个菜单项时,将触发该菜单项的Click事件。通过一些键盘操作也可以触发菜单项的Click事件,例如使用该菜单项的快捷键。9.1.1菜单2.弹出式菜单ContextMenuStrip(上下文菜单栏)控件用于创建弹出式菜单。弹出式菜单,也称快捷菜单、上下文菜单,是窗体内的浮动菜单,用鼠标右击窗体或控件时才显示。弹出式菜单能以灵活的方式为用户提供更加便利的操作,但需要与别的对象(如窗体、文本框、图片框)结合使用,并提供与此对象有关的特殊命令。所以,当用户在窗体中不同位置右击时,通常显示不同的菜单项。9.1.1菜单2.弹出式菜单设计快捷菜单的基本步骤如下:(1)添加ContextMenuStrip控件。在工具箱中双击ContextMenuStrip控件,即可在窗体的组件区中添加一个弹出式菜单控件。组件区中,刚创建的控件处于被选中状态,窗体设计器中可以看到ContextMenuStrip及“请在此键入”字样。(2)设计菜单项。弹出式菜单的设计方法与下拉式菜单基本相同,只是不必设计主菜单项。(3)激活弹出式菜单。选中需要使用的弹出式菜单的窗体或控件,在其属性窗口中设置其ContextMenuStrip属性为所需的ContextMenuStrip控件。【例】设计一个程序,可以设置窗体背景色和不透明度。9.1.2工具栏一般来说,当程序具有菜单时,也应该有工具栏。工具栏是Windows的标准特性,也是用户操作程序的最简单方法。通过使用工具栏,可以美化软件的界面设计,还可以达到快速实现相应功能的目的。1.设计工具栏ToolStrip(工具栏)控件用于创建工具栏。工具栏包含一组以图标按钮为主的工具项,通过单击其中的各个工具项就可以执行相应的操作。实际上,可以把工具栏看成是常用菜单项的快捷方式,工具栏中的每个工具项都应该有对应的菜单项。9.1.2工具栏1.设计工具栏(1)工具栏的创建方法。创建工具栏的基本步骤如下:①添加ToolStrip控件。在工具箱中双击ToolStrip控件,可在窗体上添加一个工具栏。②给工具栏添加工具项。单击ToolStrip控件中的下拉箭头按钮,将弹出一个下拉列表,共有8种工具项,其中使用最多的是Button(按钮,对应ToolStripButton类)。在工具栏中添加工具项最快捷的方法是直接在设计视图中单击下拉箭头按钮,从弹出的下拉列表中选择一种工具项,即可完成该工具项的添加。也可以通过ToolStrip控件的Items属性,在“项集合编辑器”中添加工具项。9.1.2工具栏1.设计工具栏(2)ToolStrip控件的常用属性。ToolStrip控件的常用属性除了Name、BackColor、Enabled、Location、Locked、Visible等一般属性,还有一些自己特有的属性。(3)工具栏按钮的常用属性和事件。ToolStripButton对象的常用属性除了Name、Enabled、Text、TextAlign、Visible等一般属性,还有一些自己特有的属性。Click事件是工具栏按钮的常用事件,可以为其编写事件处理程序来实现相应功能。工具栏按钮往往实现和下拉式菜单中的菜单项相同的功能,可以在ToolStripButton的Click事件处理程序中,调用菜单项的Click事件方法。9.1.2工具栏2.创建可拖动的工具栏ToolStripContainer(工具栏容器)控件可以在窗体的每一侧提供面板,并提供可以容纳一个或多个控件的中间面板。在工具箱中双击ToolStripContainer控件,可在窗体上添加一个工具栏容器,单击其右侧的小三角按钮,将弹出一个下拉菜单。9.1.2工具栏2.创建可拖动的工具栏在弹出的下拉菜单中选择“在窗体中停靠填充”,工具栏容器将填满除菜单栏以外的所有窗体编辑区(如果窗体上没有其他控件将填满整个编辑区)。9.1.2工具栏2.创建可拖动的工具栏ToolStripContainer控件包括5个区域,分别是“上、下、左、右、中”。其中,中间的区域用来放置普通控件,放置在该区域中的控件运行时不可拖动;其余的4个区域(上、下、左、右)用来放置可拖动的工具栏,这些区域需要单击相应的箭头按钮才能显示(或隐藏)。依次单击4个箭头按钮,可展开4个区域,然后选中上方的区域,双击工具箱中的ToolStrip控件,即可在上面的区域中添加一个可拖动的工具栏。程序运行时,用户可以在4个区域中随意拖动工具栏。9.1.3状态栏状态栏一般位于窗体的底部,主要用来显示应用程序的各种状态信息,即将当前程序的某项信息显示到窗体上作为提示。StatusStrip(状态栏)控件用于创建状态栏。状态栏可以由若干个状态面板组成,显示为状态栏中一个个小窗格,每个面板中可以显示一种指示状态的文本、图标或指示进程正在进行的进度条。9.1.3状态栏1.状态栏的创建方法创建状态栏的基本步骤如下:(1)添加StatusStrip控件。在工具箱中双击StatusStrip控件,可在窗体底部添加一个状态栏。(2)给状态栏添加状态面板。单击StatusStrip控件中的下拉箭头按钮,将弹出一个下拉列表,共有4种状态面板,其中使用最多的是StatusLabel(状态标签,对应ToolStripStatusLabel类)。在状态栏中添加状态面板最快捷的方法是直接在设计视图中单击下拉箭头按钮,从弹出的下拉列表中选择一种状态面板,即可完成该状态面板的添加。也可以通过StatusStrip控件的Items属性,在“项集合编辑器”中添加工具项