C#高级编程(第六版)学习:第三十一章:Windows窗体
第三十一章 Windows窗体
- 创建Windows窗体应用程序
在文本编辑器中输入:
|
/* * form.cs * a simple windows form * */ using System; using System.Windows.Forms;
namespace NotepadForms { public class MyForm:System.Windows.Forms.Form { public MyForm() { }
[STAThread] static void Main() { Application.Run(new MyForm()); } } } |
使用命令csc /target:winexe form.cs进行编译,生成form.exe得到一个没有标题的空白小窗体。
Main函数是客户应用程序的默认入口。在大型应用程序中,Main方法不位于窗体中,而是位于类中,负责完成需要的启动。
[STAThread],它把COM线程模型设置为单线程单元(Single-Threaded Apartment, STA)。COM交互操作需要STA线程模型,默认为添加到Windows窗体项目中。
Application.Run()方法负责启动标准的应用程序消息循环。它有三个重载版本:第一个版本不带参数,第二个重载版本把ApplicationContext对象作为其参数,第三个重载版本将窗体对象作为参数。
Application类中相关的函数和属性
|
方法/属性 |
说明 |
|
CommonAppDataPath |
对应用程序的所有用户都通用的数据路径。一半是BasePath\CompanyName\ProductName\Version 其中,公司名一般为命名空间的名字,产品名为程序集信息中的产品名。 Basepath为UserDir\ApplicationData |
|
ExecutablePath |
启动应用程序的可执行文件的路径和文件名 |
|
LocalUserAppDataPath |
类似于CommonAppDataPath,支持漫游 |
|
MessageLoop |
如果当前线程存在消息循环,返回true,否则,false |
|
StartupPath |
类似于ExecutablePath,但是不包含文件名,仅包含路径 |
|
AddMessageFilter |
用于预处理消息。在基于IMessagerFilter的对象上执行,消息可以从消息循环中过滤出来,或者在消息发送到消息循环中之前进行特殊处理 |
|
DoEvents |
允许处理队列中的消息 |
|
EnableVisualStyles |
允许对应用程序的各种可视化元素使用XP可视化样式。有两个重载版本接受清单消息。一个接受清单流,一个接收清单所在的完整名称和路径。 |
|
Exit和ExitThread |
Exit结束所有当前运行的消息循环,退出应用程序。ExitThread只结束消息循环,关闭当前线程上的所有窗口。 |
InitializeComponent初始化了添加到窗体上的所有控件,还初始化了窗体的属性。
如果在InitializeComponent中修改了任意类型的代码,下次在设计器中进行修改时,这些改动就会消失(VS2008)。每次在设计器中进行修改后,InitializeComponent就会重新生成。InitializeComponent负责实例化控件,在InitializeComponent之前所有引用控件的调用都会失败。
SuspendLayout:临时挂起控件第一次初始化时发生的布局事件。
ResumeLayout把事件重置为正常状态。
- Control类
Control类位于System.Windows.Forms命名空间中,它是每个控件和窗体的基类。Control类执行核心功能,创建用户所见的界面。派生自System.ComponentModel.Component类。
大小和位置
由Height,Width,Top,Bottom,Left,Right以及辅助的Size和Location确定。Location为一个Point结构。
Bounds属性返回一个Rectangle对象,表示一个控件区域。包含滚动条和标题栏。Rectangle位于System.Drawing命名空间。
ClientSize属性是一个Size结构,表示客户区,不包含滚动条和标题栏。
PointToScreen和ScreenToClient分别是客户区转屏幕坐标和屏幕坐标转客户区。RectangleToScreen和RectangleToClient具有相似的功能。
Dock属性确定子控件停放在父控件的哪条边上。DockStyle枚举值用做其属性值,Top,Bottom,Right,Left,Fill和None。
Anchor属性把子控件的一条边与父控件的一条边对齐。将到该边的距离设定为固定值。
Anchor属性采用AnchorStyles枚举的值,有Top,Bottom,Right,Left,None。
用户交互操作
常见的事件有Click,DoubleClick,KeyDown,KeyPress,Validaing,和Paint
- 标准控件和组件
Button控件
派生于ButtonBase类
表示简单的命令按钮
可以在窗体的AcceptDefault和CancelDefault中设置默认的确定和取消按钮。
CheckBox控件
派生于ButtonBase类。
复选框
如果ThreeState设为true,复选框有三种状态,用CheckState属性表示
Checked:选中
Unchecked:没选中
Indeterminate:复选框置灰。
Checked属性只有true或者false
- 窗体
Form类派生于Control类
窗口的实例化和释放过程
- 构造函数
- Load
- Activated
- Closing
- Closed
- Deactivate
前三个事件在初始化时发生
Load在对象实例化,窗体可见前发生。
引发Load是,窗体以存在,但不可见。构造函数执行过程中,窗体还不存在。
如果在构造函数中将Visible属性设为true或者调用了Show方法。就会立即引发Load事件,这也会使窗体可见。
关闭窗体时,Closing事件在正在关闭时发生,将Cancel属性设置为true,就可以取消关闭
Closed在窗体关闭后发生。
与窗体启动相关的属性有StartPosition,ShowInBarTaskBar,TopMost。
Show和ShowDialog显示窗体
Show:执行后窗体对用户可见,后面的代码继续执行
ShowDialog:窗体关闭后代码才执行。返回DialogResult值。
C#高级编程(第六版)学习:第三十一章:Windows窗体的更多相关文章
- C#高级编程 (第六版) 学习 第三章:对象和类型
第三章 对象和类型 1,类和结构 类存储在托管堆上 结构存储在堆栈上 2,类成员 类中的数据和函数称为类成员 数据成员 数据成员包括了字段.常量和事件 函数成员 方法:与某个类相关的函数,可以 ...
- C#高级编程 (第六版) 学习 第七章:委托和事件
第七章 委托和事件 回调(callback)函数是Windows编程的一个重要方面,实际上是方法调用的指针,也称为函数指针. .Net以委托的形式实现了函数指针的概念,.Net的委托是类型安全的. 委 ...
- C#高级编程 (第六版) 学习 第六章:运算符和类型强制转换
第六章 运算符和类型强制转换 1,运算符 类别 运算符 算术运算符 + - * / % 逻辑运算符 & | ^ ~ && || ! 字符串连接运算符 + 增量和减量运算符 ++ ...
- C#高级编程 (第六版) 学习 第一章:.Net体系结构
第一章 .Net体系结构 1,公共语言运行库(Common Language Runtime, CLR) .Net Framework的核心是其运行库的执行环境,称为公共语言运行库,或.Net运行库. ...
- C#高级编程 (第六版) 学习 第五章:数组
第五章 数组 1,简单数组 声明:int[] myArray; 初始化:myArray = new int[4]; 为数组分配内存. 还可以用如下的方法: int[] myArray = new in ...
- C#高级编程 (第六版) 学习 第四章:继承
第四章 继承 1,继承的类型 实现继承: 一个类派生于一个基类型,拥有该基类型所有成员字段和函数. 接口继承 一个类型只继承了函数的签名,没有继承任何实现代码. 2,实现继承 class MyDe ...
- C#高级编程 (第六版) 学习 第二章:C#基础
第二章 基础 1,helloworld示例: helloworld.cs using System; using System.Collections.Generic; using System.Li ...
- c#高级编程第七版 学习笔记 第一章 .NET体系结构
第一章 .NET体系结构 本章内容: 编译和运行面向.NET的代码 Microsoft中间语言(Microsoft Intermediate Language,MSIL或简称IL)的优点 值 ...
- c#高级编程第七版 学习笔记 第二章 核心c#
第二章 核心C# 本章内容: 声明变量 变量的初始化和作用域 C#的预定义数据类型 在c#程序中使用条件语句.循环和跳转语句执行流 枚举 名称空间 Main()方法 基本的命令行c#编译器选项 使用S ...
随机推荐
- 基于 pyMongo 和 wxPython 实现的 MongoDB Schema Analyser
MongoDB 作为文档型 NoSql 数据库,它的集合表结构往往不像关系型数据库那么固定和统一,同一个集合下的文档(document)的字段变化和差异可能很大,特别是在数据模型缺乏良好规划和规范的数 ...
- 运维与架构—Nginx的优缺点
Nginx的优点是: 1.工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名.目录结构 它的正则规则比HAProxy更为强大和灵活,这也是它目前广泛流行的主要原因之一 Nginx ...
- git提交代码速度过慢解决方法(macos)
iterm2中ping下github.com和github.global.ssl.fastly.net $ ping github.com 得到以下 PING github.com (192.30.2 ...
- Linux入门进阶第四天——服务管理
以下均基于CentOS6.3,其中有部分命令已经过时,在CentOS7中不再使用,请注意 [更新]:CentOS7改变: CentOS .0中一个最主要的改变,就是切换到了systemd.它用于替代红 ...
- 加分项——C语言实现Linux的pwd命令
加分项--C语言实现Linux的pwd命令 实现要求 1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3 实现mypwd 4 测试mypwd pwd pw ...
- c++ 结构指针和双向链表
结构指针 为结构指针动态分配内存 结构中的结构 双向链表 结构指针 struct mytime { //char name[256]; int hour;//时 int min; //分 i ...
- Windows下安装RaibbitMQ
1.软件准备 1.1 erlang语言包 到http://www.erlang.org/download.html下载,并且运行! 安装目录C:\Program Files (x86)\erl5.10 ...
- MySQL入门篇(四)之MySQL主从复制
一.MySQL主从复制原理 随机站点访问量的鞥集啊,单台的MySQL服务器压力也不断地增加,此时需要对MySQL进行优化,如果在MySQL优化无明显改善时期,可以使用高可用.主从复制.读写分离.分库分 ...
- 天下武功,无快不破,Python开发必备的6个库
01 Python 必备之 PyPy PyPy 主要用于何处? 如果你需要更快的 Python 应用程序,最简单的实现的方法就是通过 PyPy ,Python 运行时与实时(JIT)编译器.与使用普通 ...
- EXE模块说明
EXE模块是fastCMS系统内非常优秀的一个功能模块,它将一些操作打包成可执行单元.它具有以下优势: 1)功能明确.便于维护. 2)发起端可获取EXE模块的执行结果. 3)对于不需要执行结果的请求, ...