Windows窗体

Windows窗体
窗体
.NET Framework提供了一系列与窗体编程相关的类,用来供开发人员使用。这些类主要包含于System.Windows.Forms命名空间中。
其中与窗体和控件相关的基类见下表:

.NET Framework窗体编程相关基类  

窗体:可以是标准窗体,多文档界面(MDI)窗体,对话框或图形化的显示界面。窗体时对象,这些对象公开定义其外观的属性、其行为的方法、用于用户交互的事件。通过设置窗体的属性以及编写响应其事件的代码,可自定义该对象以满足应用程序的要求。windows也是控件,因为它是从Control类中继承过来的。
Control类为定义窗体及控件的基类。Form为窗体类,用来构造窗体,其他标准Windows控件类均派生于Control类
创建Windows窗体应用程序的方式:
1 .一般都是在创建项目的时候选择Windows应用程序,这样就能创建windows窗体应用程序
通过项目创建的Windows应用程序:

2.通过编程创建一个Windows窗体应用程序:
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;//引用Windows窗体类
namespace WindowsForms//命名空间名
{
class myForm : System.Windows.Forms.Form//声明一个类,继承于Form类
{
public myForm() { }//myForm默认的构造函数
static void Main() //程序入口
{
Application.Run(new myForm());//启动标准的应用程序的消息循环
}
}
}
此程序中Application.Run(),Application提供一些静态方法和属性以管理应用程序,例如启动和停止应用程序、处理 Windows 消息的方法和获取应用程序信息的属性。 此类不能被继承。Run方法有三种重载方法,在此是第三种重载方法,其意思是将窗体对象作为参数。运行结果是创建一个空白的Windows窗体:

控件 

 

(1) 使用Visual Studio 2005开发环境添加控件 

打开“工具栏”面板,讲目标控件拖入窗体中的合适位置即可。

(2) 使用代码添加控件 

使用代码在窗体中添加一个按钮。.NET Framework提供了System.Windows.Forms.Button类供开发人员实例化标准按钮对象,因此创建按钮的过程既是由Button类实例化对象的过程。此时,窗体被看作是容器,包含按钮控件,故设计时需将按钮对象作为窗体类的一个成员。在实例化窗体对象的同时实例化按钮对象,即可完成添加按钮操作。

当窗体需要包含有多个不同种类的控件时,要要布置好各个控件的位置、大小及顺序关系。即对各个控件进行布局。可以使用以下四种属性来布局控件:

(1) Location,设置控件相对于窗体左上角的X与Y坐标;

(2) Size,设置控件本书的高度和宽度;

(3) Anchor,把控件附着在窗体的一个或多个边框上;

(4) Dock,设定控件相对于窗体某个边框的停靠方式。

Location及Size都使用绝对值来设定控件的位置与大小,当窗体大小改变时,控件的大小及位置无法随窗体的变化而自动等比例的变化,造成布局的混乱。为了解决这个问题,C#为控件提供了Dock属性。Dock属性的取值于DockStyle枚举类型成员

要使程序完成一定功能,需要响应控件的特定事件,如单击、移动等。在VS2005环境中,选中目标控件,双击,即可添加控件的click事件,并自动切换到该事件的响应函数中。

在代码中添加如下内容,即可完成响应控件事件工作:

//响应Click事件

button1.Click += new System.EventHandler ( button1_Click ) ;

同时,需要添加button1_Click方法,作为事件的响应函数。  

标签控件(Label)是工具箱中最简单的控件,通常用来显示一些描述性文字。且显示内容通常在其声明周期内固定不变。Label控件的最常用属性为Text属性,用来指定在Label控件中显示的内容,可以通过设置Label控件的Color、Font、Style等属性来改变显示的效果。

(1) button控件

按钮控件(Button)允许用户通过单击来执行操作。当用户单击按钮时,即调用Click事件处理程序。可将代码放入Click事件处理程序来执行所选择的任意操作。

按钮上显示的文本由Text属性指定。如果文本超出按钮宽度,则换到下一行。但是,如果控件无法容纳文本的总体高度,则将剪裁文本。按钮(Button)控件还可以使用Image和ImageList属性显示图像

(2) 单选框和复选框控件

二者都允许用户从一系列的选项中选择,差别在于在一系列选项中单选框之间是“互斥”的,即只能有一个被选中;各个复选框选项之间相互无影响,即可有多个被选中。

.NET支持三种类型的按钮:按钮、单选框以及复选框,这三种按钮都继承于ButtonBase类。三种按钮分别对应于Button、CheckBox、RadioBox类,这些类包含于System.Windows.Forms命名空间中。

文本框控件负责为用户提供一个编辑数据的接口,也可以用来显示数据。.NET Frameword提供了TextBoxBase类支持文本框操作。该类为抽象类,由其派生的两个子类为:TextBox和RichTextBox分别对应于TextBox和RichTextBox控件

列表框控件 

列表控件用于向用户提供多选择项的动态列别。C#提供了两种类型的列表控件:ListBox控件和ComboBox控件,二者都可以完成列表选择任务,但各有自己的属性。二者均由ListControl基类派生而来,ListControl类继承于Control类。其中, ListBox控件

列表框(ListBox)用于在滚动的窗口显示一系列的条目。如果列表框中的条目多于在一个窗口中所能容纳的数目,则自动添加滚动条

ComboBox列表框控件显示与一个ListBox组合的编辑字段,使用户可以从列表中选择或输入新文本。ComboBox的默认行为是显示一个编辑字段,该字段附带一个隐藏的下拉列表。DropDownStyle属性确定要显示的组合框的样式。可以输入一个值,该值指示允许以下情况:简单的下拉列表(始终显示列表)、下拉列表框(文本部分不可编辑,并且必须选择一个箭头才能查看下拉列表框)或默认下拉列表框(文本部分可编辑,并且用户必须按箭头键才能查看列表)。若要始终显示用户不能编辑的列表,建议使用ListBox控件。

在Windows应用程序中日期时间相关控件是必不可少的。相关控件包括定时器Timer控件、DateTimePicker控件以及MonthCalendar控件。

(1) Timer控件

 定时器(Timer)控件用于以用户定义的事件间隔触发事件。Windows计时器是为单线程环境设计的,其中,UI线程用于执行处理。它要求用户代码有一个可用的UI消息泵,而且总是在同一个线程中操作,或者将调用封送到另一个线程。

当Enabled属性设置为true且Interval属性大于0时,将引发Tick事件,引发的时间间隔由Interval属性控制,该属性以毫秒为单位。若应用程序中实现了一个定时器,在程序执行结束时需要调用Dispose()方法,释放系统资源。

Form类位于System.Windows.Forms命名空间下,由Control类派生产生。该类具有非常丰富的成员。支持了C#窗体的绝大不部分操作。Form类与MDI应用程序相关的属性包括:

l ActiveMdiChild:该属性获取或指定当前的容器窗体中获得窗体
l IsMdiContainer:该属性获取和设置窗体是否作为一个MDI主窗体。
l IsMdiChild:获取当期窗体是否为一个MDI容器窗体的子窗体。
l MdiChildren:获取当期容器窗体的子窗体数组,只有当前窗体为MDI容器窗体时该属性值才有效。
l MdiParent:获取或设置此窗体的当前多文档界面(MDI)父窗体,利用此属性可以将一个普通窗体定义为一个MDI容器窗体的子窗体,形成包含关系。
l LayoutMdi:在MDI父窗体内排列多文档界面(MDI)子窗体。以便更易于导航和操作MDI子窗体。

MDI应用程序创建步骤如下:

(1) 打开Visual Studio 2005开发环境,在菜单上选择“文件”|“新建项目”命令,显示“新建项目”对话框,创建基于C#的Windows应用程序项目。

 (2) 在“解决方案资源管理器”中右击Form1.cs,在弹出菜单上选择“重命名”,然后将窗体的名称修改为MdiParentForm.cs,将窗体的Text属性设置为“MDI父窗体”,并将其IsMdiContainer属性设置为True。此时,Visual C#将客户区域变为暗灰色,并呈现下陷效果。这是MDI父窗口的标准外观。所有可见的子窗口都在该区域中显示。

 (3) 在菜单上选择“项目”/“添加Windows窗体”,创建一个新的窗体。将该窗体命名为MdiChild1.cs,并将其Text属性设置为MdiChild1。

(4) 类似的,添加第三个窗体到项目中。将该窗体命名为MdiChild2.cs,并将其Text属性改为Child2。

(5) 在“解决方案资源管理器”中双击MdiParentForm.cs,在设计器中显示父窗口,双击窗体访问其缺省的Load事件。输入下列代码:

MdiChild1 CldForm1 = new MdiChild1 ();

CldForm1.MdiParent = this;

CldForm1.Show();                      

(6) 编译执行,即可看到MDI框架,如下图所示:

 

posted @ 2012-01-19 09:50  ·1234567890  阅读(838)  评论(0)    收藏  举报