C#最基础窗体剖析

原创 2015年11月18日 13:05:35

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#]增强响应性,用加载窗体(Splash)来载入主窗体

许多软件在启动的时候都会显示一个加载窗口(Splash),譬如微软的Visual Studio、Office以及Adobe的许多软件。这些加载窗口很精美,但“漂亮”并不是它们的主要作用。 设想一...
  • xidianbabin
  • xidianbabin
  • 2015年08月29日 10:19
  • 509

C#去边框以及无边框窗体移动

1.去边框  : 1) 选中要去除边框的窗体,按F4调出窗体属性。 2)在属性框中找到FormBorderStyle选择none。 去边框之前效果 去边框之后效果 2.去掉边框后实...
  • LPVeneno
  • LPVeneno
  • 2016年12月07日 16:12
  • 5895

C# 等待进度窗体实现

C#等待进度窗体实现在软件开发中我们会遇到在弹出另一个窗体前需要处理一部分内容,处理会耗时一段时间的情况。 此时我们可以写一个进度窗体在处理前显示出来,处理完成后关闭。 如这种更新检查窗体:实现1...
  • xzhh19921019
  • xzhh19921019
  • 2017年01月20日 13:42
  • 1183

C#之WinForm基础 主窗体在哪里可以看到,如何更改主窗体,主窗体有什么特殊的地方

慈心积善融学习,技术愿为有情学。善心速造多好事,前人栽树后乘凉。我今于此写经验,愿见文者得启发。 1、主窗体在哪里可以看到?在代码中! using System; usin...
  • yushaopu
  • yushaopu
  • 2016年09月17日 08:32
  • 1134

C#中利用委托创建窗体单向通信

C#中利用委托创建窗体单向通信
  • J_Kang
  • J_Kang
  • 2016年05月06日 11:25
  • 1410

C#简单窗体应用程序(三)

使用C#创建控制台应用程序的基本步骤: (1)创建项目; (2)用户界面设计; (3)属性设置; (4)编写程序代码; (5)保存、调试、运行; 例题:设计歌曲列表界面,效果如下:   第一步:创...
  • A_Helloy
  • A_Helloy
  • 2017年03月13日 09:02
  • 1391

C#之WinForm基础 运行多个窗体时,点击按钮,一次关闭所有窗体

慈心积善融学习,技术愿为有情学。善心速造多好事,前人栽树后乘凉。我今于此写经验,愿见文者得启发。 运行多个窗体时,一次关闭所有窗体。 要点在于:只需要关闭主窗体,所有窗体就全都关闭了!...
  • yushaopu
  • yushaopu
  • 2016年09月17日 09:00
  • 1457

C# 透明窗体制作方法

制作透明窗体办法有好几种,各有优缺点. 我们先来看看C#本身提供的办法 1:通过设置窗体的 TransparencyKey实现      例:窗体中的白色会变成透明 this...
  • wwqingyue
  • wwqingyue
  • 2016年10月31日 17:57
  • 617

C#之WinForm基础 添加多个窗体

慈心积善融学习,技术愿为有情学。善心速造多好事,前人栽树后乘凉。我今于此写经验,愿见文者得启发。 感恩曾经帮助过 心少朴 的人。 ...
  • yushaopu
  • yushaopu
  • 2016年09月17日 08:56
  • 1172

【C#】C#实现嵌入式窗体(弹出的子窗体在父窗体内)

最近有些时间,就把上半年做的东西整理了一下。   C#搭配SQL Server使用,是我们在学习数据库的时候比较好的工具。       由于换了一台电脑,以前的数据库也没有备份,所以现在无法运行。...
  • qq_32353771
  • qq_32353771
  • 2016年11月15日 21:20
  • 2136
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#最基础窗体剖析
举报原因:
原因补充:

(最多只允许输入30个字)