使用.net开发Windows应用程序的过程概要

.net 环境下开发 Windows 应用程序,相比于 visual studio 6.0 确实简单了不少。至少,使用起来的感觉比较直观,也只需要不多的代码就可以搭建起一个应用程序的框架。笔者在 Visual studio.net 2005 上使用 C# 边学边写了一个 Windows 应用程序处女作,感觉挺惬意。现在作一个简要回顾,算是一种总结和整理。当然了,要做好一个软件系统,需要做的工作很多,并不会因为工具的演化而可以偷懒,只是利用工具的一些便利,把重心放在更需要考虑的问题上而已。对于程序员来讲,任何时候都不敢把希望寄托在工具之上。
更深的东西我就不去说了,一是才疏学浅,尚未深入大殿,乱出狂语,吓坏了小朋友没关系,吓坏了花花草草总不好啊。二是写概要简单。简单就是美嘛,为了美,我深爱简单,就只写那么几步,完整不完整,到位不到位,那不是我现在的责任了。
开发 Windows 应用程序,简言之,就那么几步:
 
创建项目
创建界面
编写后台程序
调试和测试
打包发布
 
创建项目
 
创建项目是很幼儿园的工作,记住从文件开始,一直点到新建 Windows 应用程序就可以了。这个过程忽略不记。
新建完项目之后,会自动创建一个文件 :Program.cs 。这是这个应用的主程序。也就是说,运行应用程序时,是从这个文件里的程序开始的。这个文件能不能改成别的名字,我不太清楚,现在我还没兴趣去探讨这个问题。
Program.cs 文件里有一个类,最重要的是有个 Main() 函数,这个函数是应用的真正入口。它不象在 C++ 里面,函数里有两个看起来头疼的参数。
那么,从 Main() 怎么进入到程序员自己编写的程序的呢?语句 Application .Run() 就是干这工作的。
Run 函数作为一个循环函数,主要进行消息的处理 :Run 函数不断地查询应用程序的消息队列,一旦有消息出现就将其发回给 Windows, 并由 Windows 再来调用处理该消息的窗口函数,而窗口则是隐藏在应用程序框架类内部的。当消息队列中没有消息时(大多数的时候是这种情况) ,Run 函数就会调用 OnIdle 函数,从而做一些应用程序框架类或用户在程序空闲时所要做的工作。 如果既没有消息又没有空闲工作要做 , 那么应用程序就一直处于等待状态。当应用程序关闭时 ,Run 函数就会调用 ExitInstance 函数 , 做一些退出前的处理工作。(注:这段解释来自互联网)
一般来讲, Windows 应用程序首先得有窗口 (Form) ,没有窗口也就不好叫 Windows 应用程序了。有了窗口,用户才方便操作。窗口操作系统从 90 年代诞生之日起,便引领潮流,风靡世界,至今长盛不衰。可见窗口的重要性了。
要进入应用的窗口,就创建一个窗口放入 run() 函数就可以了。
Application.Run(new MainForm());
  其中 MainForm 是应用程序的主窗口。怎么创建窗口,请接下来看 … …
创建界面
毫无疑问,主窗口是最为重要的主界面了。
(一)创建主窗体
创建界面的工作和创建项目是一样简单。选中项目,右键单击,在快捷菜单中选择“添加” Windows 窗体”,取一个文件名 MainForm.cs 。取这个名字只是为了阅读方便,并不是说窗体名字就是 MainForm 。选中窗体,可以修改窗体名字属性。窗体也是一个类,窗体名就是类的名字,这个类是从 Form 类派生出来的。用这个类名(窗体名)来创建对象, 然后才能显示出来。如在
Application.Run(new MainForm());
里, MainForm 是窗体类的名字,而不是窗体文件的文件名。 new MainFrom() 就是创建 MainForm 类的对象。
主窗体往往包含多个子窗体( MDI 应用),因此,一般需要将主窗体设置为一个容器,用于容纳子窗体。
设置方法:选中主窗体,在属性窗口中找到 IsMdiContainer 属性,将其设置为 true
既然应用程序中有多个子窗体,那么从主窗体如何调用子窗体呢?使用菜单,通过点击菜单项来调用对应的子窗体,这是一种最为常用的方法了。在当前几乎所有的 Windows 应用程序上,都有菜单这个东西。那么接下来的工作就是要创建菜单了。
(二)创建菜单
非常令人惊喜的是, Visual Studio.net 2005 提供了非常方便的工具来创建菜单。你只需要做这几步就可以了。
1、              在工具栏中找到 MenuStrip 控件。( strip 这个词用得有意思,带子,菜单放在带子上面,呵呵)
2、              MenuStrip 控件拖动到主窗体 MainForm 上。一条带子就靠在主窗体的上方,紧靠着标题栏。
3、              在带子上有提示:请在此处键入。键入什么?当然是菜单名、菜单项了。键了一个,后面就自动新出现一个文本框“请在此处键入”,引导你一步步建立好菜单与菜单项。微软的东西做得好,这些细小的地方就是体现。我有一个朋友在研究交互,如此体贴方便的提示,确实算是很好的交互了,不用看说明书,一看就知道怎么操作,感谢微软,感谢 CCTV
运行一下看看,一个窗体跃然面前,窗体上一条带子横过窗体,带子上有你创建的一个一个菜单。一个 Windows 应用程序已经雏形初现了。
为了后面叙述的方便,假设你创建了一个菜单叫“文件”,文件下面有一个菜单项叫“调用子窗体”。如果我们点击“调用子窗体”,程序应该弹出一个子窗体,方便我们后面的操作。这是怎么调用的呢?那得先创建了子窗体再说。
(三)创建子窗体
父亲是怎么产生出来的,儿子也大同小异。子窗体的创建与主窗体的创建方法是一样的。为便于后面的描述,假设你创建了一个子窗体,命名为 ChildForm (记住,是窗体名为 ChildForm ,而不是文件名)。
其实,到目前为止,我们所说的创建窗体,只是定义一个窗体类而已。在程序运行时它并不会自动跳出来,还需要创建窗体(类)的对象,那才是真正可以看得见的窗体。
(四)调用子窗体
我们前面说过,菜单位于主窗体上,点击菜单项显示对应的子窗体。这一过程包含了几层含义:
 
1、      必须对点击菜单项事件进行处理。
2、      必须使用new关键字来创建子窗体对象。
3、      子窗体对象应该绘制(通俗点就是显示)出来。
4、      子窗体与主窗体有父子关系。
 
先来看如何处理菜单项点击事件。
在主窗体上,点击菜单,菜单会下拉,双击菜单项(如前面定义的“调用子窗体”菜单项),此时在 Visual Studio 中会打开一个新的窗口,标签的名字为: MainForm.cs (主窗体的代码文件)。窗口内就是可供程序员编辑代码的区域。
MainForm.cs 中,自动产生了一个函数 :
private void 调用子窗体 ToolStripMenuItem_Click(object sender, EventArgs e)
{
}
这一个函数就是“调用子窗体”菜单项的鼠标单击事件的处理函数。意思就是说,点击了这个菜单项后,要干什么事情,就把代码写在这个函数里吧。
前面说到,点击了“调用子窗体”菜单项,目的就是要调用子窗体。那么,我们就在这个函数体内编写调用子窗体对象的代码就可以了。
调用子窗体对象
调用子窗体对象,一般来讲,应当先声明这个对象
private ChildForm myChildForm = null; // 先声明 ChildForm 的对象 myChildForm
接下来,在“调用子窗体”菜单项单击事件处理函数中创建子窗体对象
private void 调用子窗体 ToolStripMenuItem_Click(object sender, EventArgs e)
{
 myChildForm = new ChildForm();
}
创建完成了之后要显示子窗体,应该加上显示子窗体的代码
private void 调用子窗体 ToolStripMenuItem_Click(object sender, EventArgs e)
{
 myChildForm = new ChildForm();
 myChildForm.Show(); // 将子窗体对象绘制出来
}
此时,子窗体与主窗体之间的父子关系并没有建立,主窗体的操作并不影响子窗体,子窗体也可以随便拖动到主窗体之外,点击主窗体,子窗体就隐藏到主窗体后面去了。这并不是我们所期望的,为此,必须指定主窗体与子窗体的父子关系:
private void 调用子窗体 ToolStripMenuItem_Click(object sender, EventArgs e)
{
 myChildForm = new ChildForm();
 myChildForm.MdiParent = this; //this 代表的是主窗体,它是 myChildForm 的父窗体
 myChildForm.Show(); // 将子窗体对象绘制出来
}
这样,子窗体就不能够拖动到主窗体之外了,也不会因为点击了主窗体而使子窗体隐藏到了后面。
在这里,有人可能想,设置父子关系,也可以采用如下方式 :
this.MdiChildren = myChildForm;
道理上是这样:孩子的父亲是父亲,父亲的孩子是孩子,这两句话是一样的。但是 MdiChildren 只能读,不能写。可以获取当前窗体的子窗体,却不能进行设置,因此,此语句调试时会报错。
看起来,我们已经顺利实现了目标:点击菜单项,显示子窗体对象。
但是,假设子窗体对象已经存在了,再点击菜单项,会出现什么情况?
运行一下就会看到:会出现两个相同的子窗体对象,如果再点击菜单项,相同子窗体数更多。
这显示不是我们所期望的。它不仅会占用更多内存,还可能造成数据的不一致。我们只需要显示一个子窗体对象就可以了。
为了实现这一点,就需要对子窗体对象是否已经存在进行判断。如果子窗体对象不存在,则创建子窗体对象,并显示子窗体对象;如果子窗体对象已经存在,则只需要显示子窗体对象就可以了。
因此,上面的函数可以修改为:
private void 调用子窗体 ToolStripMenuItem_Click(object sender, EventArgs e)
{
    if(myChildForm == null)
    {
        myChildForm = new ChildForm();
    }   
    myChildForm.MdiParent = this;
    myChildForm.Show();
}
现在,这个事件处理函数比刚才要更加合理了,能够解决出现多个相同子窗体的问题。但是,如果关闭了子窗体,再点击菜单项来调用子窗体,这仍会出现问题。这是为什么呢?请参见我的另一篇文章: C#中通过父窗口调用子窗口的问题
好了,我们的基本框架已经搭起来了。至于窗体中如何显示数据库的信息,执行一些特殊的操作,那就不是本文所要关注的了。
编写后台程序和对程序进行调试和测试,我不想去论述了。讲述这两个内容就显示违背了本文追求简单的原则。
程序编写调试、测试完毕,接下来就是把它交给用户使用,使你的 Wndows 应用程序能够部署到不同的计算机上运行。自然,我们会想到制作一个安装文件,指导用户进行安装,以便正常使用。(如果不用安装,是不是就会更绿色一点呢?纳闷中 … …
接下来就说一说如何制作安装文件。
打包发布
Visual Studio.net 确实是一个伟大的工具,不仅方便了你进行设计和编码,提供了很多智能的功能,也为你提供了你想要的工具,如打包。
1 、点击 Visual Studio.net 2005 的“文件”菜单,选择“新建项目”
2 、在新建项目对话框的左侧,找到“其它项目类型”,点击“安装和部署”。
3 、在 “Visual Studio 已安装的模板 框中,点击安装向导(向导方式比较人性化,当然,也可能变得更繁琐)。
4 、设置项目的名称(假设为 ” SetupGuid” ),指定位置,然后点击确定。
5 、点击启动调试按钮。期间,可能会需要安装一些文件,别忘了插入 VS 的安装光盘并指明正确位置。其它的只需要按向导一步一步执行就可以了。
6 、正确生成完成之后,在安装项目指定的文件夹下的 Debug 或者 Release 文件夹中,可以找到 setup.exe 或者安装所需的 .msi 文件。
使用生成的 setup.exe 文件或者 .msi 文件,就可以在其它计算机上进行安装使用了。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值