第五章创建Windows窗体应用程序C#.net程序设计C#.NET程序设计本章主要内容常用的Windows窗体控件Windows窗体设计通用对话框创建Windows窗体应用程序C#.NET程序设计Windows窗体简介使用Windows窗体可以开发具有丰富图像的交互式用户界面的应用程序。窗体Form是向用户显示信息的可视图面。通过向窗体上添加控件,并对用户操作(如鼠标单击或按下按键)的响应编写事件处理代码,生成Windows窗体应用程序。控件是显示数据或接受数据输入的相对独立的用户界面(UI)元素。Windows窗体控件包含可添加到Windows窗体上的各式控件:用于显示文本框、按钮、下拉框、单选按钮等控件。在(工具箱)面板中包含两种类型的控件;具有用户界面的控件和没有用户界面的控件。具有用户界面的控件会出现在窗体中,并且在运行时可见;没有用户界面的控件主要用于在后台提供一些功能,在运行时不可见。控件ImageList和Timer就是没有用户界面的控件。C#.NET程序设计窗体应用程序的创建与运行第一章WelcomeWorld项目的代码,代码文件主要有3个(.cs后缀的文件),分别是Forml.cs、Forml.Designer.cs和Program.cs。Forml类从System.Windows.Forms.Form派生,它使用Forml.cs、Forml.Designer.cs两个代码文件通过partial关键字共同定义Form1窗体类Forml.Designer.cs的代码由窗体设计器自动生成。自动生成的Form1类中包含一个InitializeComponent方法,这个方法用于窗体类初始化,包括设置窗体的属性、创建窗体所包含的控件以及设置这些控件的属性,它由类的构造函数Form1()调用。窗体的显示是通过Program类Main()方法中Application.Run(new.Form1());语句来实现的。Application类位于System.Windows.Form命名空间中,它的静态方法Run用来启动并显示指定的窗体。在上面的代码中,先创建Form1类的实例,然后把新创建的实例传递给Application.Run方法,在运行程序时就会显示出这个窗体实例。关闭主窗体时,就会退出应用程序。Windows窗体//forml.cs源代码文件PublicpartialclassForm1:Form//其中Form就是System.Windows.Forms.Form{…publicForm1(){InitializeComponent();}}//Forml.Designer.cs源代码文件partialclassForm1{#regionWindows窗体设计器生成的代码privatevoidInitializeComponent(){…this.label1.Text=用户名;this.txtUserName.Text=在这里输入;this.btnOk.Text=确定;this.Text=Form1;}}//Program.cs:staticclassProgram{staticvoidMain(){Application.Run(newForm1());}}C#.NET程序设计Windows窗体事件事件是对象发送消息,通知操作的发生。操作可能是由用户交互(例如鼠标单击)引起的,也可能是由某些其他的程序逻辑触发的,如Windows窗体载入Load事件。事件处理程序是用于事件(如用户单击按钮)发生时要执行的操作。引发事件时,将执行收到该事件的一个或多个事件处理程序。事件驱动的应用程序执行事件处理程序代码以响应事件。每个窗体和控件都公开一组预定义事件,可根据这些事件进行编程。如果发生其中一个事件并且在相关联的事件处理程序中有代码,则调用该代码。对象引发的事件有不同类型,但对于大多数控件,很多类型是通用的。例如,大多数控件都会处理Click事件。如果用户单击窗体,就会执行窗体的Click事件处理程序内的代码。当Windows窗体应用程序启动时,窗体事件按以下顺序引发:System.Windows.Forms.Form.LoadSystem.Windows.Forms.Form.Activated当应用程序关闭时,主窗体的关闭事件按以下顺序引发:System.Windows.Forms.Form.FormClosingSystem.Windows.Forms.Form.FormClosedWindows窗体C#.NET程序设计windows应用程序的委托与事件处理委托在.NET框架中常用于建立事件处理机制的对象。事件模型使用“委托”将事件绑定到用来处理事件的方法上。当发生事件时,委托调用绑定的方法。当应用程序发生某个事件时,控件通过调用该事件的委托引发事件,委托接着调用绑定的方法。事件处理机制有两种,一对多通知和多对一通知。一对多通知(或称多路广播委托)是委托依次调用事件委托每个绑定方法,这样可提供一对多通知。多对一通知是委托还允许将多个事件绑定到同一个方法上,从而允许多对一通知。例如,单击按钮事件和单击菜单命令事件都能调用同一委托,然后该委托调用单个方法以相同方式处理各个事件。Windows窗体例:创建windows应用程序,体验Windows窗体常用事件,及窗体关闭。•新建一个名为WindowsEvent的C#windows应用程序项目。•在Form1窗体双击,添加Form1窗体Load事件处理代码程序如下:在Form1.cs文件的Form1类下:privatevoidForm1_Load(objectsender,EventArgse){this.Text=窗体标题在Load事件中修改;//该行是手工输入}在Form1.Designer.cs文件的Form1类InitializeComponent()方法中自动添加:this.Load+=newSystem.EventHandler(this.Form1_Load);以上实现一个事件处理有两步:一是编写Form1_Load方法,其次是Form1_Load方法的委托对象添加到Form1窗体的Load事件。除了手工输入一行改变窗体标题的代码外,其余都是通过窗体双击来完成的。•在Form1窗体的属性窗口的事件列表,双击FormClosing事件,添加处理代码:privatevoidForm1_FormClosing(objectsender,FormClosingEventArgse){if(DialogResult.No==MessageBox.Show(关闭吗?,退出提示,MessageBoxButtons.YesNo))e.Cancel=true;}在窗体关闭时,FormClosing事件发生,将e.Cancel设置为true取消此事件,则该窗体保持打开状态。•在Form1窗体的属性窗口的事件列表,双击Click事件,添加处理代码:privatevoidForm1_Click(objectsender,EventArgse){this.Close();}当鼠标点击窗体时,将关闭窗体,及触发FormClosing事件。C#.NET程序设计调整控件的大小改变控件大小有以下方式:在(属性)窗口中改变控件的Size属性。单击要调整大小的控件包括窗体,并拖动控件的尺寸柄(一般控件在其边界有8个点)中的一个,直接拖动控件的大小。在窗选择控件,然后使Shift键+箭头键来更加精确地改变它的大小,每次一个像素。调整窗体上多个控件的大小,按住Ctrl键或Shift键,选择要调整大小的控件。选择的第一个控件的大小将用于其他控件。在“格式”菜单中,选择“使大小相同”,然后从四个选项中选择“宽度”,“高度”或“两者”,更改所选控件的尺寸以匹配选择的第一个控件。在代码中,通过Size属性设置控件的大小:myText.Size=newSize(100,30);或使用Bounds属性同时设置控件位置和大小:左上角(10,10)宽100,高30。代码如下:myText.Bounds=newSystem.Drawing.Rectangle(10,10,100,30);调整控件C#.NET程序设计在窗体中定位控件定位控件有以下方式:在窗体设计器中通过拖动控件进行定位以及通过指定Location属性来定位控件。控件的位置相对于包含它的容器控件(容器控件包括窗体,Panel等),其单位为像素。在设计时,可以通过属性窗口修改控件的Location属性改变控件的位置,可以直接输入控件的位置值(X和Y值以逗号隔开),也可以展开Location属性节点,然后分别输入X坐标值和Y坐标值。在代码中通过Location属性设置控件的位置。例如:myText.Location=newSystem.Drawing.Point(100,100);调整控件C#.NET程序设计对控件进行分层位于上面的控件将覆盖位于下面的控件。可以按以下方式对控件进行分层:使用窗体设计器对控件进行分层。首先在窗体中选择一个控件,然后右击该控件并从快捷菜单中选择(置于顶层)或(置于底层)命令把控件置于窗体Z轴的的顶层或底层。可以使用代码把控件置于窗体Z轴的顶层或底层,例如:myText.BringToFront();//置于顶层myText.SendToBack();//置于底层调整控件C#.NET程序设计Anchor属性固定控件相对边框距离使用Anchor属性使控件的位置相对于其父控件即容器(如窗体或Panel控件等)的某一边保持固定距离,当改变父控件的大小时,窗体上的控件的位置将会随之改变而保持这个相对距离不变。使用属性窗口来改变Anchor属性,单击Anchor属性右边的箭头,显示一个编辑器如下图,该编辑器显示一个十字线。若要设置定位点,单击该十字线的上、左、右或下部分,使之变为深灰色时,就表示控件相对于窗体这条边的距离固定。例如,如果有一个放置Button的Form,而该按钮的Anchor属性值设置为Top和Bottom,当Form的高度增加时,Button的高度也增加相同高度,以保持到Form的上边缘和下边缘的锚定距离不变。可以使用Anchor属性编码如下:this.button1.Anchor=System.Windows.Forms.AnchorStyles.Bottom;调整控件C#.NET程序设计Dock属性设置边缘对齐通过设置Dock,可以使控件与父控件的边缘对齐。此属性指定控件在父控件中的驻留位置。可以将Dock属性设置为下列值:Bottom,Left,Top,Right,Fill和None:分别表示停靠到父控件底部、左侧、顶部、右侧、占据窗体中的所有剩余空间和不在任何位置停靠。使用Dock属性可以定义在调整父控件大小时如何自动调整控件的大小。例如,将Dock设置为DockStyle.Left将导致控件与其父控件的左边缘对齐,并在父控件调整大小时调整自身大小。Anchor和Dock属性是互相排斥的。每次只可以设置一个属性,最后设置的属性优先。调整控件C#.NET程序设计设置控件的Tab键顺序控件的Tab键顺序决定了当用户使用Tab键切换焦点的顺序。在默认情况下,控件的Tab键顺序就是控件添加到窗体中的顺序。可以选择“视图”|“Tab键顺序”菜单命令把窗体设计器切换到Tab键顺序选择模式,并在该模式中单击各个控件把它们的Tab键顺序设置为单击控件的顺序,设置完成,再通过“视图”|“Tab键顺序”菜单命令把Tab键顺序选择模式切换到窗体设计器。当然也可以通过在属性窗口各个控件的TabIndex属性来改变它们的Tab键顺序。调整控件C#.NET程序设计使用“格式”子菜单调整界面控件布局VisualStudio2005菜单“格式”共有“对齐”,“使大小相同”,“水平间距”,“垂直间距”,“锁定控件”等子菜单。各子菜单又分别