没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|其它|编辑:郝浩|2007-09-21 10:24:41.000|阅读 1269 次
概述:
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
在.net 环境下开发 Windows 应用程序,相比于 visual studio 6.0确实简单了不少。至少,使用起来的感觉比较直观,也只需要不多的代码就可以搭建起一个应用程序的框架。笔者在 Visual studio.net 2005上使用 C#边学边写了一个 Windows 应用程序处女作,感觉挺惬意。当然了,要做好一个软件系统,需要做的工作很多,并不会因为工具的演化而可以偷懒,只是利用工具的一些便利,把重心放在更需要考虑的问题上而已。对于程序员来讲,任何时候都不敢把希望寄托在工具之上。
二是写概要简单。
开发 Windows 应用程序,简言之,就那么几步:
l 创建项目
l 创建界面
l 编写后台程序
l 调试和测试
l 打包发布
创建项目
创建项目是很幼儿园的工作,记住从文件开始,一直点到新建 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、在带子上有提示:请在此处键入。键入什么?当然是菜单名、菜单项了。键了一个,后面就自动新出现一个文本框“请在此处键入”,引导你一步步建立好菜单与菜单项。微软的东西做得好,这些细小的地方就是体现。
运行一下看看,一个窗体跃然面前,窗体上一条带子横过窗体,带子上有你创建的一个一个菜单。一个 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 文件,就可以在其它计算机上进行安装使用了。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
文章转载自:csdn接DevExpress原厂商通知,将于近日上调旗下产品授权价格,现在下单客户可享受优惠报价!
面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号