编写一个写字板初步了解Winform编程(一)——Winform程序结构
来源:互联网 发布:sql日期取年月日 编辑:程序博客网 时间:2024/05/16 17:29
以编写完的NotePad为例:
1.程序的入口任然为ProGram.cs中Program类的Main函数
using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using System.Windows.Forms;namespace WindowsFormsApplicationNotePad{ static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } }}
其中,[STAThread]表示指示程序的COM线程模型是单线程单元(STA),这里我们不用管它
接下来的Application类是一个管理应用程序的类,该类不能继承。管理应用程序包括:启动、停止、处理Windows消息、获取应用程序信息等
EnableVisualStyles()是启用应用程序的可视样式
SetCompatibleTextRenderingDefault(false)是不将某些控件上定义的UseCompatibleTextRendering属性设置成应用程序范围内的默认值
Run()表示在当前窗体上运行标准应用程序消息循环,并使指定的窗体可见
Form1是我们自定义的继承Form类的类。就是Windows的窗体。
主函数中的代码都是自动生成的,这次编写写字板的时候不用改动。
2.Form1.cs代码,对于窗体的设计
Form1.cs是我们需要设计的代码的放置部分。比如我们单击一个按钮,那么这个相关的代码就要放在这里。有时候我们需要一些相对于Form1公共的变量,这要放在这里。Form1.cs就是一个普通的类,放置着各种我们自定义的函数,自定义的全局变量,自定义的委托。
我们通过一小段代码来看:
using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.Drawing.Text;namespace WindowsFormsApplicationNotePad{ public partial class Form1 : Form { float ZoomFactor = 1; bool IsModify = false; string CurFileName = string.Empty; int Start = 0; public Form1() { InitializeComponent(); } private void buttonBold_Click(object sender, EventArgs e) { SetFontStyle(FontStyle.Bold); } }}这里Form1类的类型为partial,这是局部类型,局部类型一般在以下几种情况应用:
- 类型特别大,不宜放在一个文件中实现。
- 一个类型中的一部分代码为自动化工具生成的代码,不宜与我们自己编写的代码混合在一起。
- 需要多人合作编写一个类。
这里是由于第二个原因。我们的Form1类被分为了Form1.cs和Form1.Designer.cs两个文件中,Form1.Designer.cs就是由VS的自动化工具,窗口设计的可视化工具生成的。这个文件我们之后再讲。
回到Form1.cs。我么可以看到他的构造函数,里面只有一个函数InitializeComponent(),这是设计器所支持的方法,微软建议不要手工修改,而使用设计器来修改。事实上,用代码编辑器也是可以修改这个方法的,但是要符合设计器的格式,否则设计器就不能正常工作。有时候会遇到设计器出现问题的情况,比如委托被删除,而Designer.cs文件仍然把这个委托加入了控件的方法,这个时候就要手动的编辑Designer.cs文件。
InitializeComponent()这个方法用于初始化在所有组件,包括Form1这个窗体。我们会在稍后讲Designer.cs的时候介绍这个函数到底是怎么工作的。
其他的方法都是由设计器生成或者你自己添加的,比如buttonBold_Click方法,这个方法就是设计器添加的,但是你也可以自己写,函数命名规则一般都是组件名_组件方法(消息发送者,消息);不同的组件EventArgs e可能不同,比如Form的FormClosing方法的事件消息就是FormClosingEventArgs类型,而不是EventArgs类型,但是大多数组件都与代码中的buttonBold_Click方法的参数一样,为object sengder,EventArgs e。
当你在这写完方法后,系统不会根据函数名自动的与组件绑定的,也就是说凡是你写的都是自定义的函数,你需要手动的绑定到组件上。
当然是用设计器对组件双击就能生成一个设计器生成的函数,这个函数设计器会帮你和组件绑定。
3.Form1.Designer.cs窗口设计代码
我先贴一段窗体设计的代码:
namespace WindowsFormsApplicationNotePad{ partial class Form1 { /// <summary> /// 必需的设计器变量。 /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// 清理所有正在使用的资源。 /// </summary> /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param> protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows 窗体设计器生成的代码 /// <summary> /// 设计器支持所需的方法 - 不要修改 /// 使用代码编辑器修改此方法的内容。 /// </summary> private void InitializeComponent() { this.button1 = new System.Windows.Forms.Button(); this.Controls.Add(this.button1); this.button1.Click += new System.EventHandler(this.button1_Click); } private System.Windows.Forms.Button button1; }}
我们可以看到Designer.cs文件也是实现Form1类,所以它也使用了partial关键字它实现了一个Dispose方法,用于释放资源
然后就是InitializeComponent()方法了,这个方法的函数全是由设计器生成的,虽然不建议修改,但是也可以看看它到底是怎么实现的。如果有过Java Swing设计基础和有过Eclipse上的WindowsDesigner插件使用经验的话,马上就可以知道这些代码是干嘛用的。没错,他们是如此的相似。
注意:上面贴的这段代码只贴了一部分并且做了一部分修改,只是用于演示。
想要把一个控件加到窗体上就使用方法Controls.Add(控件).如果要修改窗体的一些属性也非常简单,比如修改标题,只需要对this.Text进行修改就可以了
这些组件全是Form1类的值。组件之间的嵌套也是如此,只是把一个组件用Add方法加到另一个组件上而已,只不过每个组件的Add方法可能表现形式不同。
还有一个关键点是委托的绑定,比如这里的代码
this.button1.Click += new System.EventHandler(this.button1_Click);就是表示在button1的Click事件中加委托,后面就是你在Form1.cs中写的方法,所以方法名自己取也没有关系,大不了到这来改就是了。
- 编写一个写字板初步了解Winform编程(一)——Winform程序结构
- 编写一个写字板初步了解Winform编程(二)——界面设计
- 编写一个写字板初步了解Winform编程(三)——代码设计
- Winform编程总结1—从网上找到一个winform控件,实现打开word的功能
- 集群—初步了解(一)
- .NET WinForm编程Q&A系列(一)——多线程操作
- c# 编写winform登录注册程序(一,登录部分)
- WinForm二三事(一)
- winform总结(一)
- winform应用程序(一)
- WinForm基础(一)
- 用C# winform 编写一个计算器
- winform编程
- winform窗体(一)——基本属性
- .NET 2.0 - WinForm Control - DataGridView 编程36计(一)
- .NET 2.0 - WinForm Control - DataGridView 编程36计(一)
- .NET 2.0 - WinForm Control - DataGridView 编程36计(一)
- NET 2.0 - WinForm Control - DataGridView 编程36计(一)
- android 底片,浮雕,老照片效果
- JS----setCookie,getCookie,delCookie
- Python代码总结
- mysql忘记密码找回
- 读书笔记Cocos2d-x之工厂方法
- 编写一个写字板初步了解Winform编程(一)——Winform程序结构
- SVN服务器搭建和使用(一)
- nginx+tomcat7+redis集群配置
- 网络收集javaScript中常用的基本验证
- SVN服务器搭建和使用(二)
- Unix学习笔记------书本例题编程实例------从标注输入读入然后从标准输出输出
- 64位win&python2.7下gensim环境搭建
- [LeetCode74]Search a 2D Matrix
- android 文件缓存 字符串