第三十一章 Windows窗体

  1. 创建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把事件重置为正常状态。

 

  1. 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

 

  1. 标准控件和组件

Button控件

派生于ButtonBase类

表示简单的命令按钮

可以在窗体的AcceptDefault和CancelDefault中设置默认的确定和取消按钮。

 

CheckBox控件

派生于ButtonBase类。

复选框

如果ThreeState设为true,复选框有三种状态,用CheckState属性表示

Checked:选中

Unchecked:没选中

Indeterminate:复选框置灰。

Checked属性只有true或者false

 

  1. 窗体

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窗体的更多相关文章

  1. C#高级编程 (第六版) 学习 第三章:对象和类型

    第三章 对象和类型 1,类和结构 类存储在托管堆上 结构存储在堆栈上   2,类成员 类中的数据和函数称为类成员 数据成员 数据成员包括了字段.常量和事件   函数成员 方法:与某个类相关的函数,可以 ...

  2. C#高级编程 (第六版) 学习 第七章:委托和事件

    第七章 委托和事件 回调(callback)函数是Windows编程的一个重要方面,实际上是方法调用的指针,也称为函数指针. .Net以委托的形式实现了函数指针的概念,.Net的委托是类型安全的. 委 ...

  3. C#高级编程 (第六版) 学习 第六章:运算符和类型强制转换

    第六章 运算符和类型强制转换 1,运算符 类别 运算符 算术运算符 + - * / % 逻辑运算符 & | ^ ~ && || ! 字符串连接运算符 + 增量和减量运算符 ++ ...

  4. C#高级编程 (第六版) 学习 第一章:.Net体系结构

    第一章 .Net体系结构 1,公共语言运行库(Common Language Runtime, CLR) .Net Framework的核心是其运行库的执行环境,称为公共语言运行库,或.Net运行库. ...

  5. C#高级编程 (第六版) 学习 第五章:数组

    第五章 数组 1,简单数组 声明:int[] myArray; 初始化:myArray = new int[4]; 为数组分配内存. 还可以用如下的方法: int[] myArray = new in ...

  6. C#高级编程 (第六版) 学习 第四章:继承

    第四章 继承 1,继承的类型 实现继承: 一个类派生于一个基类型,拥有该基类型所有成员字段和函数. 接口继承 一个类型只继承了函数的签名,没有继承任何实现代码.   2,实现继承 class MyDe ...

  7. C#高级编程 (第六版) 学习 第二章:C#基础

    第二章 基础 1,helloworld示例: helloworld.cs using System; using System.Collections.Generic; using System.Li ...

  8. c#高级编程第七版 学习笔记 第一章 .NET体系结构

    第一章      .NET体系结构 本章内容: 编译和运行面向.NET的代码 Microsoft中间语言(Microsoft Intermediate Language,MSIL或简称IL)的优点 值 ...

  9. c#高级编程第七版 学习笔记 第二章 核心c#

    第二章 核心C# 本章内容: 声明变量 变量的初始化和作用域 C#的预定义数据类型 在c#程序中使用条件语句.循环和跳转语句执行流 枚举 名称空间 Main()方法 基本的命令行c#编译器选项 使用S ...

随机推荐

  1. 如何使用yii2的缓存依赖特性

    目录 如何使用yii2的缓存依赖特性 概述 页面缓存 缓存依赖 链式依赖 总结 如何使用yii2的缓存依赖特性 概述 缓存是Yii2的强大特性之一,合理使用缓存技术可以有效地减小服务器的访问压力.Yi ...

  2. spring data elasticsearch 使用

    很久之前就安装了elasticsearch,一直没用java用过,最近看了一下spring data系列的elasticsearch,这里写一篇心得. 如果尚未安装elasticsearch,可以 参 ...

  3. 大数据:spark集群搭建

    创建spark用户组,组ID1000 groupadd -g 1000 spark 在spark用户组下创建用户ID 2000的spark用户  获取视频中文档资料及完整视频的伙伴请加QQ群:9479 ...

  4. 【七】ab压测

    [任务7]ab压测 安装ab压测软件 命令:yum -y install httpd-tools 进行压力测试: 执行命令:ab -c 20 -n 5000 http://192.168.159.30 ...

  5. Oracle入门第三天(上)——多表查询与分组函数

    一.多表查询 所有的连接分析,参考之前随笔:http://www.cnblogs.com/jiangbei/p/7420136.html 1.笛卡尔积 select last_name, depart ...

  6. 20155325 信息安全技术 实验二 Windows口令破解

    内容一览 实验结果 遇到的问题 思考题 详细步骤与解析(为了使存做笔记资料而做) 实验结果 字典破解 暴力破解 -不同密码强度的破解时间比较 用户名 密码 破解方式 破解时间 TEST (年月日) 字 ...

  7. 【BZOJ3527】[ZJOI3527]力

    [BZOJ3527][ZJOI3527]力 题面 bzoj 洛谷 题解 易得 \[ E_i=\sum_{j<i}\frac{q_j}{(i-j)^2}-\sum_{j>i}\frac{q_ ...

  8. 【转】 线段树完全版 ~by NotOnlySuccess

    载自:NotOnlySuccess的博客 [完全版]线段树 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时觉得挺自豪的,还去pku打广告,但是现在我自己都不太好意思去看那篇文章 ...

  9. 【RAC搭建报错】libcap.so.1:cannot open shared object file

    原文参考:http://blog.csdn.net/siyanyanyanyai/article/details/45306595 http://orax.blog.sohu.com/26207226 ...

  10. Maven学习(十六)-----Maven插件

    Maven插件 Maven 是一个执行插件的框架,每一个任务实际上是由插件完成的.Maven 插件通常用于: 创建 jar 文件 创建 war 文件 编译代码文件 进行代码单元测试 创建项目文档 创建 ...