C#高级编程(第六版)学习:第三十一章:Windows窗体

第三十一章 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值。

时间: 2024-11-08 19:22:11

C#高级编程(第六版)学习:第三十一章:Windows窗体的相关文章

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

第二章 核心C# 本章内容: 声明变量 变量的初始化和作用域 C#的预定义数据类型 在c#程序中使用条件语句.循环和跳转语句执行流 枚举 名称空间 Main()方法 基本的命令行c#编译器选项 使用System.Console执行控制台I/O 使用内部注释和文档编制功能 预处理器指令 C#编程的推荐规则和约定 2.1 第一个c#程序 2.1.1 代码 using System; namespace Wrox { Public class MyFirstClass { static void Ma

c#高级编程第七版 学习笔记 第三章 对象和类型

第三章 对象和类型 本章的内容: 类和结构的区别 类成员 按值和按引用传送参数 方法重载 构造函数和静态构造函数 只读字段 部分类 静态类 Object类,其他类型都从该类派生而来 3.1 类和结构 类和结构都是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法 结构和类的区别是他们在内存中的存储方式.访问方式(类是存储在堆上的引用类型,而结构是存储在栈上的值类型)和他们的一些特征(如结构不支持继承).较小的数据类型使用结构可提高性能.但在语法上,结构和类非常相似,主要的区别是使用

C#高级编程第11版 - 附赠第四章

导航 C# 全版本特性一览 全书目录 附赠第四章 Bots and Cognitive Services BC4.1 机器人的定义 79 BC4.2 创建对话框机器人 80 BC4.2.1 配置状态服务 81 BC4.2.2 接收机器人消息 82 BC4.2.3 定义对话框 83 BC4.2.4 使用PromptDialog 85 BC4.3 为对话框使用Form Flow 88 BC4.4 创建英雄卡 89 BC4.5 机器人和LUIS 91 BC4.5.1 定义意图和话语 92 BC4.5.

C++ PRimer PLUS(第六版)中文版 第十一章chapter11答案 参考

#include <iostream>#include <cstdlib>#include <ctime>#include "vector.h" int main(){ srand(time(0)); double direction; VECTOR::Vector step; VECTOR::Vector result(0.0, 0.0); unsigned long steps = 0; double target; double dstep;

《UNIX环境高级编程(第3版)》

<UNIX环境高级编程(第3版)> 基本信息 原书名:Advanced Programming in the UNIX Environment (3rd Edition) (Addison-Wesley Professional Computing Series) 原出版社: Addison-Wesley Professional 作者: (美)W. Richard Stevens    Stephen A. Rago 译者: 戚正伟 张亚英 尤晋元 出版社:人民邮电出版社 ISBN:9787

中文版C#高级编程第8版中的翻译错误

第180页,倒数第三行. 英文原文: If you overload == and !=, you must also override the Equals() and GetHashCode() methods inherited from System.Object; 中文译文: 在重载"=="和"!="时,还必须重载(应该是:重写)从System.Object中继承的Equals()和GetHashCode()方法. 中文版C#高级编程第8版中的翻译错误,布

C#高级编程(第8版)——委托声明、使用(第一节)

首先,声明一个Currency的结构.Currency结构有自己的ToString()重载方法和一个与GetCurrencyUnit()的签名相同的静态方法.这样,就可以用同一个委托变量调用这些方法了: struct Currency { public uint Dollars; public ushort Cents; public Currency(uint dollars, ushort cents) { this.Dollars = dollars; this.Cents = cents

《UNIX环境高级编程》第二版源码在Ubuntu下的编译

涂鸦一文,自娱娱乐. 无题 草舍如沙天地卷,且放白鹿青崖间.   望闻问切麻雀全,漫卷诗书彩云乡.   天地琴心天地曲,天际行将遥望远.   大浪淘沙鲁智深,乱云飞渡仍从容. <UNIX环境高级编程>第二版源码在Ubuntu下的编译

《Python高级编程(第2版)》中文版PDF+英文版PDF+源代码

下载:https://pan.baidu.com/s/1W11Takw5zNYknzbGL_DZcw更多分享:https://pan.baidu.com/s/1yBmXcivRHZhepu2R1Ol11Q <Python高级编程(第2版)>中文版PDF+英文版PDF+源代码中文版PDF,421页,带书签目录:英文版PDF,536页,带书签目录:配套源代码.经典书籍,讲解详细. 基于Python 3.5版本进行讲解,通过13章的内容,深度揭示了Python编程的高级技巧.从Python语言及其社