收藏本站 收藏本站
积木网首页 - 软件测试 - 常用手册 - 站长工具 - 技术社区
积木学院 > 程序开发 > C# > 正文

.Net平台Windows Forms程序设计简介

来源:互联摘选 日期:2007-02-03 08:24

  引言:

  微软的.Net平台堪称为新一代的互联网平台。对于技术开发人员来说,.Net平台的两大特性是非常卓越的,首先是其所提供的公共语言运行时,也就是公用语言运行平台,另一方面就是庞大而全面的统一编程类。

  C#语言是微软公司针对.Net平台才推出来的一门新语言,作为.Net平台的第一语言,它几乎集中了所有关于软件开发和软件工程研究的最新成果。其不但继承了C++、Java等面向对象的强大功能特性,同时还是继承了VB、Delphi等编程语言的可视化快速开发功能,其是当前第一个完全面向组件的语言。

  .Net平台中的程序设计主要分为以下四个方面:Web Forms、Windows Forms、Web Service及Windows Service,下面我向大家介绍Windows Forms程序的设计。

  1、基本知识要点

  C#语言:C#语言自C/C++演变而来。它是现代、简单、完全面向对象和类型安全的。如果您是C/C++程序员,学习曲线将会很平坦。许多C#语句直接借用您所喜爱的语言,包括表达式和操作符。C#是现代的编程语言。C#减少了C++的一些特性,不再有宏、模板和多重继承。使编程更方便的新功能是严格的类型安全、版本控制、垃圾收集(garbage collect)等等。所有的这些功能的目标都是瞄准了开发面向组件的软件。因此也把C#称为面向组件的语言。

  类:类是一组具有相同数据结构和相同操作的对象的集合。类是对一系列具有相同性质的对象的抽象,是对对象共同特征的描述。比如每一辆汽车是一个对象的话,所有的汽车可以作为一个模板,我们就定义汽车这个类。C#是面向对象的,而且所有的C#代码都必须放在一个类中,不在有全局变量及全局名称等。

  .Net类库:微软为.Net平台设计了非常庞大编程类。这些类包括从操作系统的底层到视窗界面,从数据库开发到Web服务等,涉及面非常广。这些类都是在公用语言运行时上,而且是管理、安全的代码。通过使用.Net提供的“超”类库,你可非常轻松的开发.Net平台上的四大类程序:即Web Forms、Windows Forms、Web Service及Windows Service。

  Windows Forms程序:类似于Windows程序,是指能在微软公司操作系统平台如Windows 98,Windows NT及Windows2000等平台上面运行的,有着非常漂亮脸蛋(如窗体、菜单、各种控制等)的程序。Windows Forms是在.Net平台中初次出现的概念,也称为Windows窗体,由于是.Net Windows Forms程序,因此你的视窗系统就必须首先安装.Net平台,才能运行。

  事件:在Windows系统中,我们对窗体的各种操作都将为引发一个事件,如按一个按钮引发一个点击(Click),在文本框中输入内容时将引发文本框的文本改变(Change)事件。事件产生时将要发送消息,并由专门的消息处理程序翻译并处理消息。

  Visual Studio .Net:是微软.Net平台上的一个功能强大的、集成多种开发语言的软件开发工具。通过该开发工具,大多数.Net编程语言都可以实现RAD(快速开发)。


  2 Windows Forms中的几个基本概念

  启动程序

  Windows Forms程序与一般运用程序不同的是其是通过非常漂亮的外观窗体及窗体上各种控件与用户交互。程序不是一步一步的执行,而是有一个消息循环,根据用户的各种操作所引发的事件选择执行相应的功能。为了能管理、解释Windows的各种消息、用户键盘或鼠标输入并响应各种事件,.Net类库为我们提供了一个专门用于启动Windows程序的类:System.Windows.Forms.Application,通过使用Application类,我们可以非常容易就启动一个Windows Forms程序,并把有关消息的解释、键盘及鼠标的输入管理、各种事件的响应等都交由Application负责处理。

  另外,在Windows应用程序中,与一般的运用程序一样,程序的入口也一个类中的Main()方法(注意Main要求首字母大写),同样必须是static(静态)方法,否则程序将找不到入口点。

  下面,是C#中一个非常简单的启动Windows程序的例子:

static public void Main()

{
 Application.Run(new Form());

}
  另外,Windows Forms程序的结束也是由Application类来进行的。

  窗体

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

  下面的代码,是C#中一个非常简单的继承Form(窗体)类的例子:

public class myForm:System.Windows.Forms

{

private System.Windows.Forms.Button button1;

public myForm()

{

}

}
  在自定义的窗体类myForm中增加了一个Button(按钮)对象。


  事件

  在Windows Forms程序中,几乎用户的大多数都将操作都将产生Windows事件,如按一个按钮引发一个点击(Click),用户移动鼠标有相应鼠标移动的事件等;有一些事件是不是用户操作产生而是系统自动产生的,如数据库链接断开、时间到达某一时刻或是使用外设时未就绪等。

  在Windows Forms中,每一个Windows控件有非常多的事件使其可以达到与用户交互,事件的监视及管理是由前面所说Application类负责的。在产生一个事件时一般经引发一系列操作,如点击“刷新”按钮使用程序重新从读取数据库中的数据、点击窗体上的关闭图标将关闭窗口或退出程序等。程序员就是通过书写事件的响应方法(即事件所引发的操作)来达到对程序的控制及交互。

  在.Net中,事件的声明是通过event(事件)关键字来声明的,事件是一个类的成员之一。

  .Net中,事件的响应及处理是通过一个新的数据类型delegate(代表)来处理的,delegate(代表)非常类似于C/C++的函数指针,但不同的是, delegate(代表)是安全的、受管理的。

  如下面分别用三种语言声明一个控件Click事件的代码:

public event EventHandler Click; [C#]

Public Event Click As EventHandler [Visual Basic]

public: __event EventHandler* Click; [C++]
  在上面的代码中,EventHandler是一个代表类型,其在.Net类库中的声明如下:

public delegate void EventHandler(object sender,EventArgs e); [C#]
Public Delegate Sub EventHandler(ByVal sender As Object,ByVal e As EventArgs) [Visual Basic]
public __gc __delegate void EventHandler(Object* sender,EventArgs* e); [C++]
  事件响应方法

  由于事件是解释及管理是由Application对象进行的,程序员不需要知道用户何时响应事件或者是响应了什么事件,只需要为事件添加响应方法即可。通过使用delegate(代表),你可以使用“+=”(加等于)操作符非常容易地为.Net类中的一个事件添加一个甚至多个响应方法,还可以通过非常简单的“-=”(减等于)操作符取消这些响应方法。如下面,我们为一个按钮的Click事件添加响应方法的代码:

button1.Click += new System.EventHandler(MyMethod);
  其中,MyMethod函数的定义如下:

void MyMethod(object sender, System.EventArgs e);
  这样当用户点击按钮或者是其它方法引发其Click事件时,MyMethod函数中的代码将执行。


  属性

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

  .Net类中属性(Properties)非常重要,其主要用于表示对象的特征,如一个窗体的大小、位置、是否可以最大化、是否显示控制栏及窗体的背景色彩等等。属性(Properties)对程序员是公开的,你可通过简单的“=”(赋值号)就可访问属性。在.Net类中,有的属性只能读、有的只能写,当然大多数属性是可以读写的,这主要取决于类中对属性的定义。如下面的代码在Form(窗体)类中定义了一个控制栏是否显示的属性:

public bool ControlBox {get; set;} [C#]

Public Property ControlBox As Boolean[Visual Basic]
  有了上面的定义,要使一个窗体不显示控制栏,用C#只需要使用下面的简单语句即可:

form1.ControlBox=false;
  在Windows Forms程序设计中,我们都是通过设置大量的属性值,形成一个非常漂亮的窗体的。另外,有了属性,也增加了语言对RAD(快速开发)的很好支持。

  控件:

  Windows Forms程序设计中,仅仅有窗体往往是不够的,还必须有通过众多的控件来充实窗体的内容,达到友好、人性化的人机操作界面设计。这此,.Net类库为我们准备了几乎Windows Forms中会要用到的各种元素类,一般情况下,我们把这些类或其实例称为控件,窗体就是通过各种各样的控件充实起来的。

  其实,控件这一概念是在RAD(快速开发)工具中运用起来的,这些开发工具把很多常用的类及相关内容非常形象化的放在工具栏或面板中,你只需要通过简单的鼠标拖放等操作就可以为程序添加各种各样的控件并设置控件的各种属性,由开发工具自动生成相应的代码。通过使用控件,使你的整个开发变得更加简单了。

  在.Net类库中,基本上所有的控件都是由System.Windows.Forms.Control类继承而来的,该类主要提供非常基本的、让类能实现形象化显示、处理各种键盘及鼠标的输入并响应各种事件等。

  由于大多数控件都是从Control类中继承,而该类中有一个属性即Controls表示当前控件的所有子控件集合。因此,自己写代码把一个控件添加到窗体中非常简单,只需要把所要添加的控件对象加入当前窗体的Controls属性集合中即可,如下面的C#代码:

form1.Controls.Add(new Button());
  将在窗体form1上添加一个按钮控件。

  另外,你还可以定义自己的控件,主要通过System.Windows.Forms.UserControl类(该类是Control的派生类),当然使用Control类一样可以。


  3 Windows Forms程序设计简单步骤

  通过前面的介绍,大家可能已经大概知道一个Windows Forms的设计过程了。一般情况下,设计开发一个Windows Forms程序的步骤如下:

  第一步:程序需求分析

  作为一个成熟的程序员,都会对程序的需求作比较细致详细的分析,并不断的与相关人员交流沟通,最终得到一个比较可行的解决方案。需求分析在程序设计中是必不可少的,在此就不过多讲述。

  第二步:设计你的类及对象

  面向对象程序设计中最为关键的部份就是对程序处理问题的对象化。因此,在书写程序代码前必须花更多的时间在程序所解决问题的对象化及类设计上。并解决问题的各种事务逻辑及流程。

  一般情况下,面向对象的设计分为两个阶段,即高层设计和低层设计。

  高层设计阶段开发系统的结构,构造待开发软件的总体模型。在这个阶段,标识出在具体的计算机环境中进行问题求解所需要的概念,增加了一批需要的类,这些类包括那些使得软件系统能够与外部世界进行交互的类。并输出适合应用软件要求的类、类之间的关系及应用子系统的视图规格说明。

  低层设计集中于类的详细设计阶段。类设计的目标是形成单一概念的模型,一个独立的类表示一个概念,以及设计的部件应该是可复用的和可靠的。

  类的设计过程中需要采用信息隐蔽、高内聚低耦合等设计原则。在面向对象的技术中,利用即存类的复用是一个很大的优点。

  在Windows Forms的类设计过程中,一定要充分运用各种.Net已存在类的复用,并在其基础上增加自己类所需的部件及功能等。


  第三步:界面设计(设计窗体及控件)

  由于Windows Forms程序主要讲究人机界面的美观性及友好性。因此,除了书写效率非常高的代码及算法实现程序功能外,Windows Forms中还将把界面的设计作为一个重点。

  界面设计主要是通过设置控件及窗体的各种位置、大小、形状、色彩等外观属性而实现。当然,要想实现非常友好的用户界面,完全通过在记事本等软件进行代码的录入及凭感觉调整窗体及各种控件的大小、位置及外观等是很难完成的(仅管你通过记事本也能写比较大的程序),我们必须借助各种各样的开发工具,特别的快速开发(RAD)工具的使用。

  当前,有很多可以编写.Net程序的RAD工具软件,其中最为完善,功能最为强大,非微软的Visual Studio .Net莫属。该软件是一个集多种语言为一体的快速开发(RAD)工具,提供强大的软件工程管理、计算机资源管理、智能代码感知技术及强大的程序试调等功能。使用Visual Studio .Net开发你的各种.Net应用程序,一切都将会变得事半功倍,而且你会发觉编程变得是那么轻松的事儿。

  通过使用Visual Studio .Net,你设计窗体及程序界面变得很简单了。你只需要单的鼠标拖放、位置调整等操作就可以完成程序的大多数设计。Visual Studio .Net其自动生成的代码模板及规范化的注释,还可以通过非常简单的双击控件为其添加各种事件响应函数等。另外使用Visual Studio .Net,还能很好支持.Net的多语言交叉继承等功能。

  第四步:为窗体及控件添加各类事件响应方法

  在窗体及界面设计完成后,余下的事就是给程序添加具体的源代码了。由于,WindowsForms基本上是通过由引发事件到响应事件再到执行事件这样一个过程来达到与用户的交互的,因此,我们所写的源代码大多数都是控件或窗体的各种事件响应方法,同加上一些公用的函数等,有效组合到一起就可以使你的程序按你的要求办事了。

  如果你使用Visual Studio .Net,那么,添加事件将是非常简单的,大多数时候你只需要双击控件就可以为控件添加常用的响应方法。其它的事件响应方法也可以通过其智能代码感知技术的帮助下很快地加入到程序中。

  第五步:启动程序

  一切就绪过后,现在可以写启动程序的代码了。当然,如果你使用Visual Studio .Net,可能关于启动程序的代码它都为了准备好了。前面介绍过,启动Windows Forms程序只需要通过Application类即可,该类是一个封装类,大多数的方法都是表态的,不能创建该类的实例即可以使用。使用Application一般情况下需要一个窗体(不是绝对需要),而全面你所设计的窗体类此时可用上了,直接构造你窗体类的一个实例即可。而Application类将会为你做很多事,包括内存及资源分配,各种底层组件的调用等。

  4 一个完整而简单Windows Forms程序

  下面我们将列出一个用C#写的完整整而非常简单的Windows Forms程序,该程序通过继承定义了一个自己的窗体类HelloWorld。启动程序将看到程序上有一个按钮控件,点击按钮控件将显示一个弹出菜单。

  程序几乎包括了前面所讲的各种要点如窗体、控件、控件属性、事件、事件响应等。代码中包括了具体的注释说明,请大家仔细体会!


  ////////HelloWorld.cs源程序

using System;//引入System命名空间,其包括了.Net中大多数的基本数据类型,如int,string等

using System.Drawing;//引入System.Drawing命名空间,其中包括了Windows Forms中的各种基本的图像操作要素

using System.Windows.Forms;//引入System.Windows.Forms命名空间,其定义了Windows Forms程序中所涉及到的大部份类,如窗体、控件、Application类等

public class HelloWorld:System.Windows.Forms.Form //通过继承Form而定义一个HelloWorld的窗体类,该类具有Form类的所有成员及特性

{

private System.Windows.Forms.Button button1;//定义HelloWorld类的一个成员(一个按钮)

public HelloWorld()//HelloWorld类的构造函数

{

button1=new Button();//生成一个Button实例,也可以说成初始化HelloWorld类的button1成员

button1.Text="TestButton";//设置按钮button1的Text属性值

button1.Location=new Point(100,100);//设置按钮button1的Location值

button1.Click+=new System.EventHandler(MyMethod);//为按钮button1的Click事件添加响应方法

this.Text="Hello World!";//设置自定义窗体的文本(Text)属性,该属性将成为窗体的标题

this.Controls.Add(button1);//把按钮窗体添加到窗体中,使窗体可以显示。

}

public static void Main()//程序入口

{

Application.Run(new HelloWorld());//生成HelloWorld实例并通过Application.Run()静态方法启动程序,

}

private void MyMethod(object sender,System.EventArgs e)//定义事件响应函数,请注意参数的使用,其与System.EventHandler代表中的参数要一致

{

MessageBox.Show("You have clicked the Button","Information");//使用弹出框弹出提示信息。

}

}

  编译该程序的方法,直接把代码拷到记事本中,保存为HelloWorld.cs文件,然后在命令行输入csc HelloWorld.cs即可编译(我们假设HelloWorld.cs在当前目录上)。编译完成后将生成一个名为HelloWorld.exe的文件,些时直接在命令行输入HelloWorld程序即可运行程序。


推荐阅读

 

热点信息

 
强悍的草根IT技术社区,这里应该有您想要的!
Copyright © 2010 Gimoo.Net. All Rights Rreserved  京ICP备05050695号