好,我今天就来讲解WinForm。WinForm可能计划8节课。第1节课,我想简单介绍一下WinForm的一些基本东西,介绍Form这个类。第2节课,我可能介绍一些简单的控件。第3节课,我将介绍2~3个复杂的控件。第4节课程中将涉及到ADO.NET,看情况,若果允许的话,我将讲解两节课的ADO.NET。接下来介绍一下窗体的画图这些类。完了再学习模式窗体和非模式窗体。最后要介绍一下WinForm中比较复杂的东西,比如打包发布啊调试等等一些课程,我放在最后进行讲解。最后,在课程结束之前带领大家做一个比较小的Demo,来完整的看一下这个WinForm。
今天第一节课程就是来建立一个WinForm程序,主要是好多朋友刚接触DotNet或者对VS2008比较生熟。创建一个WinForm程序怎么做呢?应该从文件——>新建——>项目,会弹出一个新建项目对话框。(我这里只安装一个C#语言,装了VB了有VB,装了Visual C++有VisualC++)选择Windows窗体应用程序。细心的朋友的会发现,在我的右下角会有个.NET Framework 2.0和.NET Framework 3.0还有.NET Framework 3.5这三个版本。我们教学呢,用2.0的教学。因为有很多朋友用VS 2005,所以我用2.0来建立一个 项目。WinForm里面不涉及到Linq表达式那些涉及到3.0或3.5的知识。只是2.0就够我们用了。
给项目的名称起名为WinFormDemo。随着这个项目创建一个解决方案,它跟我建立的项目名称一样。也就是说我在以前说过,一个解决方案中可能有多个项目,有可能只有一个。当然在我这个例子中只有一个哈。我打开右边的解决方案管理器上,你会发现它自动生成一些文件。对这些文件,我简单做一些介绍哈。我看解决方案管理器上,这是我自动生成的解决方安。这个项目下也包括一系列的文件。我简单跟大家说一下哈。
大家第一看到的文件时那个program,大家看到扩展名为.cs,可以理解这是我们放C#代码的文件。我们打开它来看一下哈。这个program会自动引用一些命名空间,并且有一个静态类program在这个静态类中有static void main() 方法,main()是一个函数的入口点当然在这个WinForm中间也是。这个项目运行是送main方法开始的。main()在加载的时候就是一个进程,一个exe或dll就是一个进程。进程只是在内存中分配一块区域,在这个区域中,我去实例化这个Form1,把Form1给显示出来就可以了。program简单的是说是程序的入口点。
大家接下来看一下这个Form1这个窗体。这里是我创建项目是默认生成的窗体。我可以把它删除,自定义一个窗体比如说,重命名一下命名为MainForm。当我展开这个MainForm的时候,它底下还有两个东西一个.resx是它一个资源文件,假如你程序上需要一些音乐图片之类的,它就用来保存路劲或一些资源文件。MianForm.cs是MainForm存放的后台代码。这样说是不严谨的,细心的朋友会发现,它添加一个关键字Partial,这是什么东西呢?这里就是这是类的一部分,还有一部分在哪里呢?在MainFormDesigner.cs 的里面,这里也有这个关键字,可以将这个类写到两个文件中。
下面我们来看一下这个MianForm这个类,我在C#中讲过继承,用冒号来实现的。大家可以看到MainForm类是继承于Form类。这个Form是Microsoft为我们定义好的,就像一个模板一样。如果我们要定义一个窗体我们可以从这个模板中继承。然后我再对这个模板进行个性化定制。我选中这个Form类,点右键转移到定义。我们可以看到Form是从源数据,边上上了一个小锁,这是什么意思?这是说我们看到的代码是通过反射机制从dll中间反射出来的它是不可改的。大家只能看它而不能修改其中代码。大家看Microsoft给我们定义这个类啊,它的构造函数,它底下还有好多方法属性和事件等等。我看到的protected、public 等等,大家学过OOP之后就可以知道这些都可以继承到子类中间的,也就是说子类中可以被访问到的。至于这个Form中有些什么呢?我不想一个个说。我想通过后面的可视化的来看这些成员。为什么我要说成员?有人知道吗?大家如果知道,我会在讲C#中类的成员对吧。这里我又说窗体的成员。窗体也就是类嘛。也也就是它这个类与以前的类有点不同,它是可视化的量化到一个窗体上可视化的。但是它本质上还是一个类。也就是说它本身也有很多它自己的成员的。我就拿这个MainForm的构造函数,它就是类的一个成员。
现在我来讲解引用这个文件夹,大家会发现system.data等等一些乱七八糟的一些东西。这是什么东西呢?用心的同学会发现,这个与using差不多啊?对的,这里只是用dll文件形式呈现的。如果没有,大家可以右键添加引用。一个dll中可以包含一个或多个命名空间。
property(属性),它包括你项目一些版本、资源编译时候的信息都会包括在这个文件夹中间。虽然这个文件夹用的东西比较少,但是一些公司、版权信息都会包含在里面。有些时候,我们会调用这些。项目的辅助信息。
接下来,我们重点说MainForm和MainFormDesigner之间的关系。大家打开这个窗体会发现这是一个普通的窗体。窗体就是一个可视化的平面的一个东西。窗体最醒目的特征是最小化、最大化、关闭。当然还有窗体的名称和窗体的图片等等一些东西。这些都从运行起来的这个角度去看它。大家从开发角度或者说从一个程序员的角度去看它的时候呢?大家更多把它看做一个容器。为什么这么说呢?大家经常去用一些程序的时候,比如QQ。它其实也是个窗体程序,它有标题它有最小化最大化关闭、这些图标这些链接等等。它就是一个主窗体包含着的这些东西。说到底,它就是容器,比如我可以在这个窗体上放置一个按钮、一个文本框。类是如何放这个容器呢?
我来分析一下它。构造函数,它的特点,名称与类名相同它没有返回值,参数是可有可无的。这里它使用了一个无参的构造函数。这里构造函数大家发现其调用了一个方法。这个方法打哪里呢,点右键转到定义。发现在非不类的另一个部分。在MianFormDesigner这个文件里面。当这个窗体在program中被new的时候,调用了MainForm构造函数,这个函数有调用另外一个方法,这个方法在MainFormDesigner中。.NET程序看起来比较呆,拖拖控件就oK,不像Java那样。但是道理都是一样的。只要大家了解这个本质和机制就行了。如果窗体上要生成100个控件,大家用代码写,那效率是非常的低下的。如果大家用Microsoft给大家提供这种便捷的方式,布局起来就相对比较快。这样就提高了企业的生产效率。对于企业来说是非常愿意做这件事情的。如果是为了调高程序员水平,那么OK你可去写个buuton2。
如果从类的角度来看,我来分析一下它。大家会发现窗体是一个类。按钮相当于窗体的一个字段。并且这字段是pravite是私有的。
大家会遇到一个问题,通过一个窗体来调用另外一个窗体。怎么调用呢?大家可以考虑考虑,我可以通过Button1调用subForm1.
如果学OO学的比较好的朋友一下 就想明白。你subForm1不就是个类吗?既然这个类我想用你怎么用啊,只要把你new成对象就可以用你啦。我来双击这个buuton1.一个类调用另外一个类可以通过new这种方式显示出来。要调用这个类必须实例化,然后show出来。
接下来我还想说,既然窗体是类,类就有很多成员:属性、事件、字段、索引器等等。那么这个可视化类有一些什么样的成员呢?到了WinForm以后,可视化类有三个比较重要的成员:方法、属性、事件。我在C#最后一讲中讲到事件和委托。事件的到来就给了鼠标和键盘良好发挥的空间。我可以单击它,双击它可以鼠标移动,把焦点落在窗体上,我可以按键盘按s键,按c键什么等等我都能识别出来。
下面,大家就来看一下可视化类的三种成员,属性。属性它有属性面板。里面有个颜色。就好比肤色。啊张三过来,张三长的比较黑。李四长的比较白。所以窗体一样。把的窗体颜色可以改变。但是人的皮肤不可变哟,呵呵。
非常多啊,大家可以挨个去改改,然后下面会有文字提示。
事件,是个东西,这里用闪电。
方法是调用的。要在代码中去写。
事件是一个动作,它不可能去实现一个功能。方法是真正的功能。触发某个事件来指定某个功能去执行。中间是通过委托来实现的。
WinForm基本知识
最新推荐文章于 2024-08-28 14:24:42 发布