《软件技术》专业剖析报告软件教研室李萍2006年5月可视化程序设计-C#第4章菜单、工具栏、状态栏与对话框讲课教师:周志德Windows风格的界面由菜单、工具栏、状态栏等组成,如学生档案管理系统的主界面。图4.1学生档案管理系统主菜单界面1.教学内容(1)菜单设计:下拉菜单设计与弹出式菜单设计(2)工具栏设计(3)状态栏设计(4)对话框使用(5)单文档编辑器设计与MDI多窗体程序设计图4.2单文档编辑器设计示例2.教学方法(项目式教学法)(1)以单文档编辑器设计为教学案例介绍菜单、工具栏、状态栏与对话框的设计与使用方法。(2)以学生档案管理系统主界面设计为教学案例介绍MDI多窗体程序设计方法。【引例】设计一个简易文本编辑器的下拉式菜单,如图4.1所示,设计要求如表4.1所示。表4.1简易文本编辑器的下拉式菜单结构文件(&F)编辑(&E)视图(&V)新建Ctrl+N剪切Ctrl+X页面打开Ctrl+O复制Ctrl+C大纲保存Ctrl+S粘贴Ctrl+V文档结构--打印Ctrl+P工具常用预览Ctrl+V格式-表格退出Ctrl+E4.1菜单设计4.1菜单设计图4.3下拉式菜单的组成二级子菜单菜单项子菜单标题子菜单提示符主菜单项分隔条主菜单一级子菜单热键(Alt+V)快捷键(Ctrl+S)菜单分为下拉式菜单与弹出式菜单4.1.1下拉式菜单设计1.菜单组成主菜单:主菜单项1、主菜单项2、…、主菜单项n下拉式菜单……一级子菜单菜单项:表示一条命令或子菜单标题二级子菜单快捷键(Ctrl+字母):直接执行的命令键子菜单三级子菜单分隔条(-):区分不同功能的菜单项组四级子菜单子菜单提示符:表示有下级子菜单五级子菜单热键:“&字母”用菜单控件menuStrip设计下拉式菜单。4.1菜单设计2.菜单控件menuStrip(1)作用:编辑制作下拉式菜单(2)添加菜单控件工具箱|菜单与工具栏|将menuStrip控件拖放到窗体内。(3)设置菜单位置(Dock属性)用Dock属性设置菜单6种位置:Top(顶部)、Bottom(底部)、Left(左边)、Right(右边)、Fill(填满)和None(不设置)。4.1.1下拉式菜单设计(4)选择菜单类型在新添加菜单项前,应选择菜单项类型。单击“请在此处键入”右侧的下拉按钮,打开设置菜单项类型的下拉框,如图4.4所示。有三种类型:MenuItem(菜单项)ComboBox(下拉框)TextBox(文本框)选择MenuItem(菜单项)4.1.1下拉式菜单设计图4.4选择菜单项类型(5)输入菜单项文本(Text属性)单击“请在此处键入”框体,输入菜单项文本,如输入“文件”,如图4.5所示。也可用菜单项的Text属性输入菜单项文本。(6)输入分隔条单击“请在此处键入”下拉按钮,选择Separator,可输入分隔条。如图4.6所示。4.1.1下拉式菜单设计图4.5输入菜单项文本图4.6输入分隔条(7)设置热键(Text属性)Text属性:菜单项文本&字母在菜单项的Text属性中输入:菜单项文本&字母,可设置热键。如在“文件”菜单项的Text属性中输入“文件(&F)”,则设置“文件”菜单项热键为F。程序执行时按Alt+F组合键可执行“文件”主菜单项命令。4.1.1下拉式菜单设计(8)设置快捷键(ShortcutKeys属性)用ShortcutKeys属性可设置子菜单的快捷键。方法如下:单击子菜单(如“新建”),在属性对话框中单击ShortcutKeys下拉按钮,选择Ctrl+N为快捷键,如图4.7所示,则Ctrl+N成为“新建”子菜单的快捷键,当按Ctrl+N组合键时,系统将执行“新建”子菜单命令。4.1.1下拉式菜单设计图4.7设置快捷键(9)设置菜单项名称Name先选择菜单项,然后在属性对话框中设置Name属性。如设置文件菜单项的Name:menu_File(10)设置菜单事件双击子菜单项(如,新建),添加菜单的Click(单击)事件,如下所示。privatevoidmenu_New_Click(objectsender,EventArgse){MessageBox.Show(新建文件!);}当用户点击“新建”菜单时将弹出“新建文件!”对话框。4.1.1下拉式菜单设计(11)删除菜单项右击菜单项|删除,可删除菜单项。(12)插入菜单项右击菜单项|插入,可插入新的菜单项。(13)设置菜单项图标右击菜单项|设置图像|本地资源|导入|选择图片文件,可设置菜单项图标。4.1.1下拉式菜单设计(14)设置菜单项有效(Enabled)属性Enabled=true菜单项有效,Enabled=false菜单项无效(15)设置菜单项复选框(Checked)属性Checked=true菜单项的复选框被选中,则该菜单项左边加上检查标记“√”,表示该菜单项是一个被选项。4.1.1下拉式菜单设计(16)项集合编辑器①作用:添加、修改和删除菜单项。②启动:单击菜单控件Items属性右边省略按钮。③项集合编辑器界面(如图4.8所示)左侧上方下拉列表框可选择要添加菜单项的类型,左侧下方是已经添加的菜单项列表,右侧是选中菜单项的属性列表。4.1.1下拉式菜单设计图4.8项集合编辑器界面4.1.1下拉式菜单设计④添加新菜单项单击“添加”按钮可以添加新菜单项。⑤删除菜单项单击删除按钮可删除当前菜单项⑥调整菜单项的位置选中菜单项后,单击列表右侧的上下箭头按钮,可调整菜单项之间的位置。4.1.1下拉式菜单设计⑦修改菜单项属性在右侧属性列表中可修改菜单项的属性。如修改Name、Text、ShortcutKeys等属性。单击菜单项的DropDownItems属性右边的省略按钮,将显示其对应下一级子菜单项的成员。如,单击“Menu_File”菜单项(文件)的DropDownItems属性右边的省略按钮,将显示文件菜单对应下一级子菜单项的成员。如图4.9所示。此时可编辑文件子菜项的属性。图4.9文件菜单的子菜单成员【例4.1】设计一个简易文本编辑器的下拉式菜单,如图4.1所示,设计要求如表4.1所示。文件(&F)(File)编辑(&E)(Edit)视图(&V)(View)新建(New)Ctrl+N剪切(Cut)Ctrl+X页面(Page)打开(Open)Ctrl+O复制(Copy)Ctrl+C大纲(Outline)保存(Save)Ctrl+S粘贴(Paste)Ctrl+V文档(Word)--打印(Print)Ctrl+P工具(Tools)常用(use)预览(Review)Ctrl+R格式(Format)-表格(Table)退出(Exit)Ctrl+E4.1.1下拉式菜单设计(1)新建解决方案ex4_1.sln存放在d:\C#\ex4_1目录中。(2)新建项目ex4_1与窗体新建一个项目ex4_1,设置窗体属性Text:下拉式菜单设计示例Name:frm_Menu(3)添加菜单控件工具箱|菜单与工具栏|将menuStrip添加到窗体中。4.1.1下拉式菜单设计(4)使用menuStrip控件建立菜单①创建主菜单项Text:输入“文件(&F)”(F键成为热键)Name:Menu_File②创建子菜单项Text:新建Name:Menu_NewShortcutKeys:选择Ctrl+N4.1.1下拉式菜单设计4.1.1下拉式菜单设计用同样方法建立编辑与视图菜单项及其子菜单。注意:菜单项的Name=Menu+菜单英文名。(5)建立菜单项事件过程为了使读者能感受到菜单项命令的执行效果,对“新建”、“打开”、“保存”与“退出”4个菜单项编写事件过程。①编写“新建”菜单项的事件过程在窗体设计器中,双击“新建”菜单项,进入代码编辑器,输入如下代码:privatevoidMenu_New_Click(objectsender,EventArgse){MessageBox.Show(新建文件!);}4.1.1下拉式菜单设计②编写“打开”菜单项的事件过程privatevoidMenu_Open_Click(objectsender,EventArgse){MessageBox.Show(打开文件!);}③编写“保存”菜单项的事件过程privatevoidMenu_Save_Click(objectsender,EventArgse){MessageBox.Show(保存文件!);}4.1.1下拉式菜单设计④编写“退出”菜单项的事件过程privatevoidMenu_Exit_Click(objectsender,EventArgse){this.Close();}4.1.1下拉式菜单设计(7)编译和运行程序执行菜单命令:调试|启动调试或按F5或按启动快速按钮,即可启动执行菜单程序。用鼠标单击菜单项,屏幕上将显示对应输出信息。用热键Alt+F,可启动文件一级子菜单,用快捷键Ctrl+O可执行“打开”菜单项命令,屏幕显示“打开文件”信息,用快捷键Ctrl+E可执行“退出”菜单项命令,系统将关闭程序。4.1.1下拉式菜单设计4.1.2弹出式菜单设计(ContextMenuStrip控件)在Windows程序设计中广泛采用弹出式菜单,如在Word菜单或工具栏区单击鼠标右键,出现有关菜单栏、工具栏等弹出式选择菜单。在文本编辑区单击鼠标右键会出现有关文本编辑方面的弹出式菜单。在C#开发环境中,用ContextMenuStrip控件设计弹出式菜单。4.1.2弹出式菜单设计1.作用:设计弹出式菜单2.位置:工具箱|菜单和工具栏3.选择菜单类型MenuItem(菜单项)ComboBox(下拉框)TextBox(文本框)选择MenuItem(菜单项)4.1.2弹出式菜单设计4.输入菜单项文本(Text属性)单击“请在此处键入”框体,输入菜单项文本,如输入“剪切”,也可用菜单项的Text属性输入菜单项文本。5、选择关联控件编辑控件(如richTextBox)均有ContextMenuStrip属性,在ContextMenuStrip属性栏中选择ContextMenuStrip控件,则右击编辑控件时,会出现ContextMenuStrip控件制作的弹出式菜单。4.1.2弹出式菜单设计【例4.2】设计一个带有下拉式菜单、弹出式菜单的文本编辑器,其工作界面如图4.10所示。设计要求如下。在例4.1的窗体中添加一个RichTextBox控件作为图文编辑器,用弹出式菜单实现文本编辑器的“复制、剪切、粘贴、清除”功能,程序设计过程如下。图4.3弹出式菜单示例4.1.2弹出式菜单设计图4.10弹出式菜单示例(1)新建解决方案ex4_2.sln。(2)设置窗体属性Name:frm_ContextMenu。Text:“下拉式菜单与弹出式菜单设计示例”。(3)将解决方案ex4_1.sln中的下拉菜单控件menuStrip1复制到frm_ContextMenu窗体中。(4)将ex4_1.sln中的所有事件处理程序复制到frm_ContextMenu窗体中。4.1.2弹出式菜单设计(5)在窗体中添加ContextMenuStrip1控件在弹出式菜单中添加四个子菜单项:Text:剪切、复制、粘贴、清除。Name:cm_Cut、cm_Copy、cm_Paste、cm_Clear(6)添加RichTextBox控件工具箱|公共控件|将RichTextBox添加到窗体。设置属性Name:rtxt_Text。ContextMenuStrip:ContextMenuStrip1RichTextBox是一种图文编辑控件,具有类似于Word的文字编辑功能。4.1.2弹出式菜单设计(7)编写剪切事件处理过程privatevoidCut()//将剪切内容存入剪切板中,清除剪切内容{Clipboard.SetDataObject(rtxt_Text.SelectedText);rtxt_Text.SelectedText=String.Empty;}privatevoidcm_Cut_Click(objects