创建Windows应用程序_第1页
创建Windows应用程序_第2页
创建Windows应用程序_第3页
创建Windows应用程序_第4页
创建Windows应用程序_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第17章创建Windows应用程序(时间:2次课,4学时)第17章创建Windows应用程序

本章主要介绍Windows窗体编程模型和创建Windows窗体应用程序的基础知识。本章教学目的:了解Windows窗体掌握窗体控件的使用方法创建WinForm程序学会编写事件响应及处理程序学会菜单设计学会创建多文档界面应用程序第17章创建Windows应用程序17.1什么是Windows窗体17.2创建简单的WinForm程序17.3Windows窗体应用程序模型17.4WinForm控件17.5VisualC#的菜单设计与编程17.6VisualC#中的MDI编程

17.1什么是Windows窗体Windows窗体是用于生成利用公共语言运行库的Windows客户端应用程序的框架,可用公共语言运行库支持的任何语言编写Windows窗体应用程序。使用Windows窗体有如下优点。操作简单且功能强大:Windows窗体是用于开发Windows应用程序的编程模型,它融合了VisualBasic6.0编程模型的简单性与公共语言运行库的强大功能和灵活性。控件结构的独立性:Windows窗体提供用于控件和控件容器结构,该结构基于控件和容器类的具体实现,这显著减少了控件和容器间的交互问题。丰富的图形:Windows窗体是GDI+的第一批载体之一,GDI+是一种新版本的Windows图形设备接口(GDI),支持Alpha混合效果、纹理画笔、高级转换和多格式文本支持等。灵活的控件:Windows窗体提供了丰富的控件,其中包含Windows提供的所有控件。这些控件还提供新功能,如用于按钮、单选按钮和复选框的“平面”样式。数据识别功能:Windows窗体对ADO.NET数据模型提供全面支持。对ActiveX控件的支持:Windows窗体对ActiveX控件提供全面支持。可以轻松地在Windows窗体应用程序中承载ActiveX控件。还可以将Windows窗体控件作为ActiveX控件承载。打印:Windows窗体提供打印框架,使应用程序能够提供各种报表。提供设计支持:Windows窗体充分利用公共语言运行库提供的元数据和组件模型功能,为控件用户和控件实施者提供全面的设计支持。17.2创建简单的WinForm程序

WinForm是.NET开发平台中对WindowsForm的一种简称。.NET为开发WinForm的应用程序提供了丰富的类库。这些WinForm

类库支持RAD(快速应用程序开发),这些类库被封装在System.Windows.Forms命名空间之中。本节通过最基本的Form类,具体说明用VisualC#开发WinForm程序的具体过程。【例17.1】开发一个简单的WinForm程序,显示一个顶级窗口(称为窗体)。开始使用Windows窗体非常简单,我们将使用VisualStudio.NET集成开发工具来完成以下程序。17.2创建简单的WinForm程序1.创建一个新项目2.查看具体代码3.代码分析17.3Windows窗体应用程序模型17.3.1窗体17.3.2属性17.3.3控件17.3.4事件17.3.5WindowsForms程序设计的步骤

17.3Windows窗体应用程序模型Windows窗体的应用程序编程模型主要由窗体、控件及其事件组成。本节涉及Windows窗体应用程序模型的以下几个方面:窗体属性控件事件简单的示例应用程序17.3.1窗体

Windows操作系统最主要的成功源于其漂亮的外观,即窗体。一般的Windows程序都有一个窗体,你可以把各种各样的控件(如标签、文本框、命令按钮等)放置在窗体上,组成一个非常人性化的人机界面。在.NETWindowsForms中使用窗体只需从System.Windows.Forms类或其派生类创建一个对象即可。下面的代码,是C#中一个非常简单的继承Form(窗体)类的例子:publicclassmyForm:System.Windows.Forms

{privateSystem.Windows.Forms.Buttonbutton1;

publicmyForm(){}}在自定义的窗体类myForm中增加了一个Button(按钮)对象。当为应用程序设计用户界面时,通常创建一个从Forms派生的类。然后可以添加控件、设置属性、创建事件处理程序以及向窗体添加编程逻辑等。17.3.2属性

在面向对象的程序设计中,一个类有很多成员,这些成员包括域(Fields)、构造函数、析构函数、方法(Methods)、事件和属性(Properties)等。这些成员有的表示对象的一个特征,也有的是驱动对象执行的一个操作。

.NET类中属性(Properties)非常重要,其主要用于表示对象的特征,如一个窗体的大小、位置、是否可以最大化、是否显示控制栏及窗体的背景色彩等。属性(Properties)对程序员是公开的,你可通过简单的“=”(赋值号)就可访问属性。在.NET类中,有的属性只能读、有的只能写,当然大多数属性是可以读写的,这主要取决于类中对属性的定义。在WindowsForms程序设计中,我们都是通过设置大量的属性值,形成一个非常漂亮的窗体的。另外,有了属性,也增加了语言对RAD(快速应用程序开发)的很好支持。【例17.2】通过设置Form类的属性,制作一个背景颜色为“蓝色”透明的窗体。17.3.2属性

1.建一个新的项目用VisualC#做出一个透明的窗体很简单,只要设定一个属性值Opacity就可以了,这个值从0.0到1.00表示透明的程度,1.0表示完全不透明。17.3.2属性

2.该窗体的源代码usingSystem;usingSystem.Drawing;usingSystem.Collections;usingSystem.ComponentModel;usingSystem.Windows.Forms;usingSystem.Data;namespacesecond{ ///<summary> ///Form1的摘要说明

///</summary> publicclassForm1:System.Windows.Forms.Form { ///<summary> ///必需的设计器变量

///</summary> privateSystem.ComponentModel.Containercomponents=null;17.3.2属性

publicForm1() { //Windows窗体设计器支持所必需的

InitializeComponent(); //TODO:在InitializeComponent

调用后添加任何构造函数代码

} ///<summary> ///清理所有正在使用的资源

///</summary> protectedoverridevoidDispose(booldisposing) { if(disposing) { if(components!=null) {

components.Dispose(); } }

base.Dispose(disposing); } #regionWindowsFormDesignergeneratedcode ///<summary> ///设计器支持所需的方法-不要使用代码编辑器修改此方法的内容

///</summary> privatevoidInitializeComponent() { //Form117.3.2属性

this.AutoScaleBaseSize=newSystem.Drawing.Size(6,14);

this.BackColor=System.Drawing.Color.Blue;//定义背景色为蓝色

this.ClientSize=newSystem.Drawing.Size(292,273);//设置窗体的大小

this.ForeColor=System.Drawing.SystemColors.Desktop;

this.FormBorderStyle=System.Windows.Forms.FormBorderStyle.Fixed3D;//窗体的边界是Fixed3D类型

this.Name="Form1";

this.Opacity=0.6;//Opacity属性设立窗体的透明程度

this.StartPosition=System.Windows.Forms.FormStartPosition.CenterScreen;//定义窗体的开始显示位置在屏幕的中间

this.Text="透明的WinForm窗体";//定义窗体的标题名称

} #endregion ///<summary> ///应用程序的主入口点

///</summary> [STAThread] staticvoidMain() {

Application.Run(newForm1()); } }}17.3.2属性

3.代码分析this关键字,在程序设计中,this关键字就是指向一个对象的实例。在上面代码中的this.Font、this.Text设定了当前或者正在运行的Form2实例的属性。再看看上面的代码,在程序中又导入了System.Drawing命名空间。通过这个命名空间定义的类,就可以更好地设计对象,如处理颜色和大小。下面通过表17.1具体说明上面程序中所设置的属性含义。17.3.2属性

属性描述Location初始化WinForm的位置,就是当应用程序运行的时候,显示WinForm的固定位置Cursor当光标在WinForm上面的时候显示的光标状态Text设定WinForm的标题StartPosition该属性有点类似于Location属性,

Location属性定义的是WinForm的绝对位置,而本属性定义的是WinForm的相对属性。本属性的值定义为CenterScreen、Manual、WindoowsDefaultLocation、WindowsDefaultBounds、CenterParentFormBorderStyle定义窗体的边界的样式。通常设定为FixedSingle、Sizable、FixedDialog、FixedToolWindow、SizableToolWindowForeColor定义窗体的前景色彩Font定义放在WinForm上的字体的类型和大小BackColor定义窗体的背景色彩ClientSize定义WinForm的大小Opacity这个属性是定义WinForm的透明程度,并且这个属性只能在Windows2000操作系统下使用。属性的区值为0~1,代表从完全透明到不透明表17.1属性的含义17.3.3控件

添加到窗体中的每个组件(如Button、TextBox或RadioButton)称为控件。Windows窗体包括通常与Windows关联的所有控件以及类似Windows窗体DataGrid的自定义控件。17.3.3控件【例17.3】在窗体上加一个标签控件,一个文本框控件(了解如何在WinForm中加入一个控件)。17.3.3控件1.建一个新的项目2.该窗体的源代码17.3.4事件

Windows窗体编程模型基于事件。当控件更改状态,如当用户单击按钮时,将引发一个事件。为了处理事件,应用程序必须为该事件注册一个事件处理方法。在WindowsForms程序中,几乎大多数用户的操作都将产生Windows事件,如按一个按钮引发一个单击(Click)事件,用户移动鼠标对应鼠标移动事件等;有一些事件不是由用户操作产生,而是由系统自动产生的,如数据库链接断开、时间到达某一时刻或是使用外设时未就绪等。在WindowsForms中,每一个Windows控件可以提供许多事件实现与用户的交互,事件的监视及管理是由前面所说Application类负责的。在产生一个事件时,一般会引发一系列操作,如单击【刷新】按钮将使程序重新读取数据库中的数据、单击窗体上的关闭图标将关闭窗口或退出程序等。程序员就是通过书写事件的响应方法(即事件所引发的操作)来达到对程序的控制和交互的。由于事件的解释和管理是由Application对象来实现,程序员不需要知道用户何时响应事件或者是响应了什么事件,只需要为事件添加响应方法即可。通过使用代理delegate,我们可以利用“+=”操作符很容易地为.NET类中的一个事件添加一个甚至多个响应方法,还可以通过“-=”操作符取消此需要的响应方法。如下面,我们为一个按钮的Click事件添加响应方法的代码:button1.Click+=newSystem.EventHandler(MyMethod);其中,MyMethod函数的定义如下:voidMyMethod(objectsender,System.EventArgs)这样当用户单击按钮或者是使用其他方法引发其Click事件时,MyMethod函数中的代码将执行。17.3.4事件

【例17.4】给【例17.3】中的按钮控件添加事件处理代码,接上例,在窗体上双击按钮,添加如下代码:privatevoidbutton1_Click(objectsender,System.EventArgse) { label1.Text="处理按钮单击事件"; }当程序运行后,单击按钮控件后,标签(label)控件的text属性值变为“处理按钮单击事件”。运行结果如图17.10所示。17.3.4事件

图17.10按钮单击事件运行结果17.3.5WindowsForms程序设计的步骤

通过以上示例,我们总结出WindowsForms程序设计一般需要以下步骤。(1) 程序需求分析(2) 设计所需的类及对象(3) 界面设计(设计窗体及控件)(4) 为窗体和控件添加各类事件响应方法(5) 编译、运行程序17.4WinForm控件

17.4.1常用控件

17.4.2示例17.4.1常用控件

1.Button(按钮)控件按钮是界面中常用的控件,通常需要对按钮做的工作为:设置按钮属性编写click事件方法2.Label(标签)控件静态文本标签,主要用来显示用户不能编辑的文本。3.TextBox(文本框)控件用来接受用户输入的文本。17.4.1常用控件4.RadioButton(单选按钮)控件用来为用户提供由两个或两个以上互斥选项组成的选项集,有两种状态:选中和不选,用户只能在一组选项中选择一个。5.CheckBox(复选框)控件为用户提供一组选项,用户一次可以选择任意数量的复选框。6.ListBoxl(列表框)控件用来显示一组条目,用户可以从中选择一个或多个。7.ComboBox(组合框)控件由两部分组成:一个文本框和一个列表框。文本框用来显示当前选中的条目,单击文本框旁边带有向下箭头的按钮,会弹出列表框,可以在列表框中选择条目。17.4.2示例

【例17.4】做一个通讯录窗体界面,窗体中使用了:标签、文本框、复选框、单选按钮、组合框、列表框和按钮控件,用来输入和接受通讯录中的个人信息。17.4.2示例

1.创建一个新的项目(1) 新建项目,命名为:adress。(2) 创建并初始化窗体以及控件,通讯录窗体界面如图17.11所示。窗体中控件包括:7个Label控件,在【属性】对话框中将它们的text属性分别改为“姓名”、“性别”、“毕业时间”、“E-mail地址”、“您的职业”、“个人爱好”、“是否愿意加入同学会”,列在窗体左侧,作为其他控件的标识。在文本为“姓名”的Label控件后面添加一个文本框,名为textBox1,在文本为“E-mail地址”的Label控件后面添加一个文本框,名为textBox2。在文本为“性别”的Label控件后面添加两个单选按钮(RadioButton),并排水平放置,文本分别改为“男”、“女”,选中RadioButton1,将其checked属性改为“true”,则默认选择该单选按钮。在文本为“毕业时间”的Label控件后面添加一个组合框控件(ComboBox),在【属性】对话框中选择Item,单击按钮,打开字符串集合编辑器,输入年份1986~1992,如图17.12所示。在文本标签“工作单位”后面添加一个列表框控件ListBox1,同样在字符串集合编辑器输入一些职业以供选择,如图17.13所示。创建并初始化程序源代码,见完整程序清单中所包含内容。17.4.2示例图17.11通讯录窗体界面17.4.2示例图17.12字符串集合编辑器

17.4.2示例图17.13字符串集合编辑器

17.4.2示例2.为【提交】按钮的单击事件添加代码privatevoidbutton1_Click(objectsender,System.EventArgse) { if(textBox1.Text=="") {

MessageBox.Show("请输入姓名","提示",MessageBoxButtons.OK,MessageBoxIcon.Exclamation); textBox1.Focus(); return; }if(comboBox1.Text=="") {

MessageBox.Show("请选择毕业时间","提示",MessageBoxButtons.OK,MessageBoxIcon.Exclamation); comboBox1.Focus(); return; }if(listBox1.Text=="") {

MessageBox.Show("请选择单位","提示",MessageBoxButtons.OK,MessageBoxIcon.Exclamation); listBox1.Focus(); return;17.4.2示例

} if(textBox2.Text=="") {

MessageBox.Show("请输入E-mail地址","提示",MessageBoxButtons.OK,MessageBoxIcon.Exclamation); textBox2.Focus(); return; } if(textBox2.Text.IndexOf('@')==-1||textBox2.Text.IndexOf('@')==0||textBox2.Text.IndexOf('@')==textBox2.Text.Length-1) {

MessageBox.Show("E-mail地址输入有误","提示",MessageBoxButtons.OK,MessageBoxIcon.Exclamation); textBox2.Focus(); return; }

MessageBox.Show("欢迎加入同学会!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);

this.Close(); }17.4.2示例3.为CheckBox4复选框的CheckedChanged事件添加代码privatevoidcheckBox4_CheckedChanged(objectsender,System.EventArgse) { if(checkBox4.Checked==false) {

if(MessageBox.Show("您真的不愿意加入同学会吗?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Exclamation)==DialogResult.No) checkBox4.Checked=true; } }17.4.2示例4.完整的程序清单usingSystem;usingSystem.Drawing;usingSystem.Collections;usingSystem.ComponentModel;usingSystem.Windows.Forms;usingSystem.Data;namespaceadress{ ///<summary> ///SummarydescriptionforForm1. ///</summary> publicclassForm1:System.Windows.Forms.Form { privateSystem.Windows.Forms.Labellabel1; privateSystem.Windows.Forms.Labellabel2; privateSystem.Windows.Forms.Labellabel3; privateSystem.Windows.Forms.Labellabel4; privateSystem.Windows.Forms.Labellabel5; privateSystem.Windows.Forms.TextBoxtextBox1;17.4.2示例

privateSystem.Windows.Forms.Buttonbutton1; privateSystem.Windows.Forms.Labellabel6; privateSystem.Windows.Forms.TextBoxtextBox2; privateSystem.Windows.Forms.Labellabel7; privateSystem.Windows.Forms.CheckBoxcheckBox3; privateSystem.Windows.Forms.CheckBoxcheckBox2; privateSystem.Windows.Forms.CheckBoxcheckBox4; privateSystem.Windows.Forms.CheckBoxcheckBox1; privateSystem.Windows.Forms.RadioButtonradioButton2; privateSystem.Windows.Forms.RadioButtonradioButton1; privateSystem.Windows.Forms.ListBoxlistBox1; privateSystem.Windows.Forms.ComboBoxcomboBox1; privateSystem.Windows.Forms.Labellabel8; ///<summary> ///Requireddesignervariable. ///</summary> privateSystem.ComponentModel.Containercomponents=null; publicForm1() { //RequiredforWindowsFormDesignersupport

InitializeComponent(); //TODO:AddanyconstructorcodeafterInitializeComponentcall }17.4.2示例

///<summary> ///Cleanupanyresourcesbeingused. ///</summary> protectedoverridevoidDispose(booldisposing) { if(disposing) { if(components!=null) {

components.Dispose(); } }

base.Dispose(disposing); } #regionWindowsFormDesignergeneratedcode ///<summary> ///RequiredmethodforDesignersupport-donotmodify ///thecontentsofthismethodwiththecodeeditor. ///</summary> privatevoidInitializeComponent() {17.4.2示例

this.label8=newSystem.Windows.Forms.Label(); this.label4=newSystem.Windows.Forms.Label(); this.label5=newSystem.Windows.Forms.Label(); this.label6=newSystem.Windows.Forms.Label(); this.label7=newSystem.Windows.Forms.Label(); this.checkBox2=newSystem.Windows.Forms.CheckBox(); this.label1=newSystem.Windows.Forms.Label(); this.label2=newSystem.Windows.Forms.Label(); this.label3=newSystem.Windows.Forms.Label(); this.checkBox3=newSystem.Windows.Forms.CheckBox(); this.checkBox4=newSystem.Windows.Forms.CheckBox(); this.textBox2=newSystem.Windows.Forms.TextBox(); this.textBox1=newSystem.Windows.Forms.TextBox(); this.checkBox1=newSystem.Windows.Forms.CheckBox(); boBox1=newSystem.Windows.Forms.ComboBox(); this.button1=newSystem.Windows.Forms.Button(); this.listBox1=newSystem.Windows.Forms.ListBox(); this.radioButton1=newSystem.Windows.Forms.RadioButton(); this.radioButton2=newSystem.Windows.Forms.RadioButton();

this.SuspendLayout(); //label8 this.label8.Location=newSystem.Drawing.Point(200,72); this.label8.Name="label8"; this.label8.Size=newSystem.Drawing.Size(24,16); this.label8.TabIndex=7;17.4.2示例

this.label8.Text="年"; //label4 this.label4.Location=newSystem.Drawing.Point(16,200); this.label4.Name="label4"; this.label4.Size=newSystem.Drawing.Size(216,23); this.label4.TabIndex=0; this.label4.Text="个人爱好(多选):"; //label5 this.label5.Location=newSystem.Drawing.Point(16,336); this.label5.Name="label5"; this.label5.Size=newSystem.Drawing.Size(192,23); this.label5.TabIndex=0; this.label5.Text="是否愿意加入同学会:"; //label6 this.label6.Location=newSystem.Drawing.Point(16,304); this.label6.Name="label6"; this.label6.TabIndex=0; this.label6.Text="Email地址:"; //label7 this.label7.Location=newSystem.Drawing.Point(16,112); this.label7.Name="label7"; this.label7.Size=newSystem.Drawing.Size(88,23); this.label7.TabIndex=0; this.label7.Text="工作单位:"; //checkBox2 this.checkBox2.Location=newSystem.Drawing.Point(64,248); this.checkBox2.Name="checkBox2"; this.checkBox2.Size=newSystem.Drawing.Size(200,24); this.checkBox2.TabIndex=9; this.checkBox2.Text="足球";17.4.2示例

//label1 this.label1.Location=newSystem.Drawing.Point(16,8); this.label1.Name="label1"; this.label1.TabIndex=0; this.label1.Text="姓名:"; //label2 this.label2.Location=newSystem.Drawing.Point(16,40); this.label2.Name="label2"; this.label2.TabIndex=0; this.label2.Text="性别:"; //label3 this.label3.Location=newSystem.Drawing.Point(16,72); this.label3.Name="label3"; this.label3.TabIndex=0; this.label3.Text="毕业时间:"; //checkBox3 this.checkBox3.Location=newSystem.Drawing.Point(64,272); this.checkBox3.Name="checkBox3"; this.checkBox3.Size=newSystem.Drawing.Size(200,24); this.checkBox3.TabIndex=10; this.checkBox3.Text="电脑"; //checkBox4 this.checkBox4.Checked=true; this.checkBox4.CheckState=System.Windows.Forms.

CheckState.Checked; this.checkBox4.Location=newSystem.Drawing.Point(64,360); this.checkBox4.Name="checkBox4"; this.checkBox4.Size=newSystem.Drawing.Size(200,24); this.checkBox4.TabIndex=11; this.checkBox4.Text="是的,我愿意";17.4.2示例

this.checkBox4.CheckedChanged+=newSystem.EventHandler (this.checkBox4_CheckedChanged); //textBox2 this.textBox2.Location=newSystem.Drawing.Point(128,304); this.textBox2.Name="textBox2"; this.textBox2.TabIndex=6; this.textBox2.Text=""; //textBox1 this.textBox1.Location=newSystem.Drawing.Point(128,8); this.textBox1.Name="textBox1"; this.textBox1.PasswordChar='*'; this.textBox1.TabIndex=0; this.textBox1.Text=""; //checkBox1 this.checkBox1.Location=newSystem.Drawing.Point(64,224); this.checkBox1.Name="checkBox1"; this.checkBox1.Size=newSystem.Drawing.Size(200,24); this.checkBox1.TabIndex=8; this.checkBox1.Text="音乐"; //comboBox117.4.2示例

boBox1.DropDownWidth=72; boBox1.Items.AddRange(newobject[]{ "1986","1987","1988","1989","1990","1991","1992",}); boBox1.Location=newSystem.Drawing.Point(128,72); boBox1.Name="comboBox1"; boBox1.Size=newSystem.Drawing.Size(72,20); boBox1.TabIndex=3; //button1 this.button1.DialogResult=System.Windows.Forms.

DialogResult.OK; this.button1.Location=newSystem.Drawing.Point(144,392); this.button1.Name="button1"; this.button1.TabIndex=12; this.button1.Text="提交(&S)"; this.button1.Click+=newSystem.EventHandler (this.button1_Click); //listBox1 this.listBox1.ItemHeight=12; this.listBox1.Items.AddRange(newobject[]{ "人事部","企管部","培训部","销售部","项目部","综合部","其他"}); this.listBox1.Location=newSystem.Drawing.Point(128,104); this.listBox1.Name="listBox1"; this.listBox1.Size=newSystem.Drawing.Size(104,88); this.listBox1.TabIndex=7; //radioButton1 this.radioButton1.Checked=true; this.radioButton1.Location=newSystem.Drawing.Point(128, 32);17.4.2示例

this.radioButton1.Name="radioButton1"; this.radioButton1.Size=newSystem.Drawing.Size(48,24); this.radioButton1.TabIndex=1; this.radioButton1.TabStop=true; this.radioButton1.Text="男"; //radioButton2 this.radioButton2.Location=newSystem.Drawing.Point(192, 32); this.radioButton2.Name="radioButton2"; this.radioButton2.Size=newSystem.Drawing.Size(48,24); this.radioButton2.TabIndex=2; this.radioButton2.Text="女"; //Form1

this.AutoScaleBaseSize=newSystem.Drawing.Size(6,14);

this.ClientSize=newSystem.Drawing.Size(400,421);

this.Controls.AddRange(new

System.Windows.Forms.Control[]{ this.label8,boBox1,this.listBox1,this.label7,this.label6,this.textBox2,this.button1,this.checkBox4,this.checkBox3,this.checkBox2,this.checkBox1,this.radioButton2,this.radioButton1,this.textBox1,this.label5,this.label4,this.label3,this.label2,this.label1});17.4.2示例

this.Name="Form1";

this.Text="通讯录";

this.ResumeLayout(false); } #endregion ///<summary> ///Themainentrypointfortheapplication. ///</summary> [STAThread] staticvoidMain() {

Application.Run(newForm1()); } privatevoidcheckBox4_CheckedChanged(objectsender, System.EventArgse) { if(checkBox4.Checked==false) {

if(MessageBox.Show("您真的不愿意加入同学会吗?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Exclamation)==DialogResult.No) checkBox4.Checked=true; } }17.4.2示例

privatevoidbutton1_Click(objectsender,System.EventArgse) { if(textBox1.Text=="") {

MessageBox.Show("请输入姓名","提示",MessageBoxButtons.OK,MessageBoxIcon.Exclamation); textBox1.Focus(); return; } if(comboBox1.Text=="") {

MessageBox.Show("请选择毕业时间","提示",MessageBoxButtons.OK,MessageBoxIcon.Exclamation); comboBox1.Focus(); return; } if(textBox2.Text=="") {

MessageBox.Show("请输入Email地址","提示",MessageBoxButtons.OK,MessageBoxIcon.Exclamation); textBox2.Focus(); return; } if(textBox2.Text.IndexOf('@')==-1||textBox2.Text.IndexOf('@')==0||textBox2.Text.IndexOf('@')==textBox2.Text.Length-1) {

MessageBox.Show("E-mail地址输入有误","提示",17.4.2示例MessageBoxButtons.OK,MessageBoxIcon.Exclamation); textBox2.Focus(); return; } if(listBox1.Text=="") {

MessageBox.Show("请选择单位","提示",MessageBoxButtons.OK,MessageBoxIcon.Exclamation); listBox1.Focus(); return; }

MessageBox.Show("欢迎加入同学会!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);

this.Close(); } }}通过以上示例,我们了解了如何创建并初始化基本控件,以及如何为控件添加相应的代码。17.5VisualC#的菜单设计与编程

17.5.1菜单设计基础知识

17.5.2示例

17.5.3用程序完成菜单设计17.5VisualC#的菜单设计与编程菜单是软件界面设计的一个重要组成部分,它描述了一个软件的大致功能和风格。所以在程序设计中,处理、设计好菜单,对于一个软件开发是否成功有着重要的意义。17.5.1菜单设计基础知识

Windows窗体支持菜单和上下文菜单。主菜单在菜单栏上显示,菜单栏位于窗体标题栏的紧下方。菜单栏包含用于将相关子菜单项分组的顶级菜单项。例如,通过单击【文件】顶级菜单项,可以显示与文件操作相关的菜单项。菜单项通常显示为应用程序的命令(如【新建】和【打开】),但是它们也可以显示为分隔条和子菜单项。可以在菜单项的旁边显示选中标记,以显示应用程序中命令的状态或功能的状态。在Windows窗体中,主菜单由MainMenu

控件表示,MainMenu在程序设计中表现为菜单项的容器,而MenuItem就是要往这个容器中添加的内容。所以在一个窗体中这种容器往往只需要一个,即需要一个MainMenu,但却往往需要多个MenuItem,即需要多个菜单项。可为窗体的特定控件或区域显示上下文菜单。通常通过右击访问它们。在Windows窗体中,上下文菜单由ContextMenu控件表示。17.5.2示例

【例17.5】完成菜单设计。1.创建主菜单(1) 建立一个新项目,名为:MENU。(2) 从【工具箱】中向窗体上拖放一个MainMenu控件,窗体的左上角将出现一个包含“请在此处输入”文本的文本框,如图17.14所示。(3) 添加【文件】菜单组:输入“文件(&F)”,此时该文本框右边和下边会出现另外两个包含“请在此处输入”文本的文本框,可根据需要添加相应的菜单项。“&F”是【文件】菜单项的快捷键方式,如图17.15所示。17.5.2示例

图17.14菜单输入文本框

17.5.2示例

图17.15输入“文件(&F)”

17.5.2示例

(4) 在【属性】对话框中选择shortcut,打开右边单元格中的组合框,从列表中选择CtrlF,如图17.16所示。(5) 依次输入“新建”、“打开”、“保存”“-(分割条)”、“退出”菜单项以及它们的快捷键属性,结果如图17.17所示。(6) 双击各个菜单项添加相应的事件处理代码。【新建】菜单项代码:privatevoidmenuItem2_Click(objectsender,System.EventArgse) {MessageBox.Show("建新文档!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information); }【打开】菜单项代码:

privatevoidmenuItem3_Click(objectsender,System.EventArgse) {

MessageBox.Show("打开文档!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information); }【保存】菜单项代码:

privatevoidmenuItem4_Click(objectsender,System.EventArgse) {

MessageBox.Show("保存文档!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information); }【退出】菜单项代码:

privatevoidmenuItem6_Click(objectsender,System.EventArgse) {

Application.Exit(); }(7) 到此,这个简单的主菜单就设计完成了。(8) 运行程序,结果如图17.18所示。单击【新建】菜单项,结果如图17.19所示。17.5.2示例

图17.16选择快捷键

17.5.2示例

图17.17菜单项17.5.2示例

图17.18运行结果

17.5.2示例

图17.19单击【新建】菜单项的结果

17.5.2示例

2.创建上下文菜单(1) 接上例,从【工具箱】中向窗体上拖放一个contexMenu控件,窗体的左上角将出现一个包含“上下文菜单”文本的文本框,如图17.20所示。(2) 单击【上下文菜单】文本框,该文本框下边会出现包含“请在此处输入”文本的文本框,如图17.21所示,可根据需要添加相应的菜单项。(3) 在【上下文菜单】文本框中添加3个菜单项:“red(&R)”、“yellow(&Y)”、“blue(&B)”,并将它们的RadioCheck属性设为true,结果如图17.22所示。(4) 在窗体上添加一个标签控件,Text属性值为:上下文菜单制作。(5) 双击各个菜单项添加相应的事件处理代码,代码功能为通过上下文菜单改变标签背景颜色。17.5.2示例

图17.20【上下文菜单】文本框

17.5.2示例

图17.21上下文菜单输入文本框

17.5.2示例

privatevoidmenuItem2_Click(objectsender,System.EventArgse) { label1.BackColor=Color.Red;//把标签背景颜色变为红色

menuItem2.Checked=true;//显示RadioCheck标记

//不显示RadioCheck标记

menuItem3.Checked=false; menuItem4.Checked=false; } privatevoidmenuItem3_Click(objectsender,System.EventArgse) { label1.BackColor=Color.Yellow;//把标签背景颜色变为黄色

menuItem3.Checked=true; menuItem2.Checked=false; menuItem4.Checked=false; } privatevoidmenuItem4_Click(objectsender,System.EventArgse) { label1.BackColor=Color.Blue;//把标签背景颜色变为蓝色

menuItem4.Checked=true; menuItem3.Checked=false; menuItem2.Checked=false; }(6) 运行程序,右击弹出上下文菜单,选择红色菜单项,结果如图17.23所示。17.5.2示例

图17.22三个菜单项

17.5.2示例

图17.23弹出上下文菜单

17.5.3用程序完成菜单设计

面向菜单编程中遇到的主要的问题大致可以分为2种:添加菜单项和删除菜单项。当然在处理以上两类问题的时候,还会遇到诸如如何添加菜单项所对应的事件、如何为菜单项添加快捷键等一些小的问题。下面就这些问题进行讲述。17.5.3用程序完成菜单设计1.设计菜单在.NETFrameworkSDK中有一个叫做System.Windows.Forms.dll的文件,其中定义了一个名为System.Windows.Forms的命名空间,此命名空间中封装了很多与界面设计相关的类、对象。VisualC#在进行菜单编程的时候,就需要用到在此命名空间中定义的2个对象:MainMenu和MenuItem。17.5.3用程序完成菜单设计2.在窗体上动态添加3个Button控件,Text值分别为:“添加菜单”、“删除菜单”和“退出”//初始化添加按钮

btnAdd=newButton();

btnAdd.Location=newPoint(275,20);

btnAdd.Text="添加菜单";

btnAdd.Click+=newEventHandler(btnAdd_Click);

btnAdd.Size=newSize(100,30);

//初始化删除按钮

btnRemove=newButton();

btnRemove.Location=newPoint(275,60);btnRemove.Text="删除菜单";

btnRemove.Click+=newEventHandler(btnRemove_Click);

btnRemove.Size=newSize(100,30);

//初始化关闭按钮

btnClose=newButton();

btnClose.Location=newPoint(275,100);

btnClose.Text="退出";

btnClose.Click+=newEventHandler(btnClose_Click);

btnClose.Size=newSize(100,30);

//在窗体中加入按钮

this.Controls.Add(btnAdd);

this.Controls.Add(btnRemove);

this.Controls.Add(btnClose);17.5.3用程序完成菜单设计3.分别为3个按钮添加相应代码【添加菜单】按钮://动态加入菜单项

protectedvoidbtnAdd_Click(objectsender,EventArgse) {

mnuRtime.MenuItems.Add("菜单"+(i+1)); i++; }【删除菜单】按钮://动态删除菜单项

protectedvoidbtnRemove_Click(objectsender,EventArgse) {

mnuRtime.MenuItems.RemoveAt(i-1); i=i-1; }【退出】按钮://退出应用程序

protectedvoidbtnClose_Click(objectsender,EventArgse) {

Application.Exit(); }

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论