C#最基础窗体剖析
Posted ZooJinGoo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#最基础窗体剖析相关的知识,希望对你有一定的参考价值。
C#基础窗体程序剖析
Microsoft Visual Studio 2015 C# Windows Form Application 创建系统默认生成程序剖析
一.[Program.cs] -> 程序入口代码(Main函数所在的代码)
1.[STAThread]
[STAThread]是一种线程模型,用在程序的入口方法上(在C#和VB.NET里是
Main()方法),来指定当前线程的ApartmentState 是STA。
[STAThread]是声明开始线程用的。有时候要用一个第三方组件,如果不加[STAThread]的话,组件上有一些功能是无法使用的。加上[STAThread]就可以用了。
2.Application.EnableVisualStyles()
Application.EnableVisualStyles()的作用定义:
publicstaticvoidEnableVisualStyles();
此方法为应用程序启用可视样式。如果控件和操作系统支持视觉样式,则控件将以视觉样式进行绘制。若要使 EnableVisualStyles生效,必须在应用程序中创建任何控件之前调用它;EnableVisualStyles 通常是 Main 函数的第一行。当调用 EnableVisualStyles时,无需单独的清单即可启用可视化样式。
3.Application.SetCompatibleTextRenderingDefault(false)
(1).作用:在应用程序范围内设置控件显示文本的默认方式(可以设为使用新的GDI+,还是旧的GDI)
true使用GDI+方式显示文本,
false使用GDI方式显示文本.
(2).只能在单独运行窗体的程序中调用该方法;不能在插件式的程序中调用该方法.
(3).只能在程序创建任何窗体前调用该方法,否则会引发
InvalidOperationException异常.
4.Application.Run()
Application.Run(new Form1());
这句话一般出现在WinForm程序的启动代码里表示在当前线程上开始运行标准应用程序消息循环,并使指定窗体可见.
二.Form1.cs[Design] -> 窗体控件,有控件工具,可以方便的拖入控件
三.[Form1.cs] -> 实现空间功能代码,包括自定义方法和事件
1.Partial
public partial class Form1 : Form
public Form1()
InitializeComponent();
*Partial是局部类型的意思,允许我们将一个类、结构或接口分成几个部分,分别实现在几个不同的.cs文件中。C#编译器在编译的时候仍会将各个部分的局部类型合并成一个完整的类
局部类型适用于以下情况:
(1) 类型特别大,不宜放在一个文件中实现。
(2) 一个类型中的一部分代码为自动化工具生成的代码,不宜与我们自己编写的代码混合在一起。
(3) 需要多人合作编写一个类。
局部类型的限制:
(1) 局部类型只适用于类、接口、结构,不支持委托和枚举。
(2) 同一个类型的各个部分必须都有修饰符 partial。
(3) 使用局部类型时,一个类型的各个部分必须位于相同的命名空间中。
(4) 一个类型的各个部分必须被同时编译。
2.InitializeComponent()
public Form1()
InitializeComponent();
InitializeComponent()是有.NET平台自动执行的,是做一些初始化的工作,例如:初始化Form1,上面的控件,加载资源,分配资源等.
3.消息相应函数
private void btn_Get(object sender, EventArgs e)中关于[object sender], [EventArgs e]的相关问题:
private void btn_Get_Click_(object sender, EventArgs e)
(1)object sender
假如这个方法是button按键的事件反应方法那么,其中的sender,就是你点击的button.可以通过类型转换得到这个button的引用:
Button sendButton = (Button)sender; 简单的说sender就是按钮,在事件处理中就可以用sender代替button.
(2)EventArgs e
EventArgs是事件参数,该事件传入的参数,比如说你用鼠标点击窗体那么EventArgs是会包含点击的位置等等,它用来辅助你处理事件.
四.[Form1.Designer.cs] -> 画面设计代码
1.IContainer
System.ComponentModel.IContainer components = null;
以上代码是窗体设计器自动生成的代码,作为组件的容器。当窗体上没有组件时,把它删掉了也“无所谓”,但是当窗体上有组件时就不能删了,删了会出现错误的。也就是说,这串代码是管理组件的一个容器。为了深刻理解,举个例子:
(1).新建个窗体,删除了component,这时没问题的
(2).再往窗体拖拽个一个任意组件,再看是不是有自动生成了个component?回答是肯定的。
(3).再把component删了,看看还有没“所谓”,出错了吧!
(4).这时其实component已经不是null了,它已经被new了:
this.components = new System.ComponentModel.Container();
[对.IContainer]的详细解释
① 控制外部资源
IComponent 接口继承自 System.IDisposable 接口,这样可以控制对象的释放。
②设计时支持
只要是支持IComponent接口,都可以看见一个设计器,并且拖入到这个组件中的子组件都会自动产生以下代码:
this.errorProvider1 = new System.Windows.Forms.ErrorProvider(this.components);
以便加入站点。
③承载组件
所有的子组件都是通过 IContainer 管理的,所以你的子组件都是被管理的。
2.Dispose()函数
protected override void Dispose(bool disposing)
if (disposing && (components != null))
components.Dispose();
base.Dispose(disposing);
IDisposable接口里面的方法原型是:void Dispose().
void Dispose()这个方法要干的事情就是释放资源。
3.#region #endregion
#region #endregion
这是区域的意思,你可以把代码或者注释放到这个里面。以使代码简洁。
Windows Form Designer generated code 指的是Windows Form设计器代码,也就是当前项目中你所用的控件的一些代码。
SuspendLayout() ResumeLayout() Layout() PerformLayout()
(1).什么时候会触发Control.Layout事件?
当控件本身的大小(size)改变时会发生本控件的Layout事件,或者当其子控件的位置(position)和大小(size)改变也会触发它的Layout事件。添加或删除子控件也会引起它的Layout事件。
(2).SuspendLayout作何用?
在添加或移除子控件,控件的边界改变,以及在发生其他可影响控件布局的变化时,会发生 Layout 事件。可以使用 SuspendLayout 挂起布局,可以在控件上执行多个操作,而无需为每次更改执行一次布局操作。也就是说,有了这个语句之后,紧接着下面的添加,删除子控件,或者改变子控件的大小,位置,以及改变它自身的位置的这些操作,都不在引发Layout事件了。
(3). ResumeLayout 方法取消布局事件。通过ResumeLayout取消挂起的布局。以后布局改变的时候就会引发layout事件了。
(4).PerformLayout事件 : 强制布局。
以上是关于C#最基础窗体剖析的主要内容,如果未能解决你的问题,请参考以下文章