📄 100165555.htm
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
19.4.1 Form类
</title></head>
<body>
<div class="area">
<div class="col1">
<div class="lineBlue">
</div>
<!-- title -->
<div class="arcTitle">
<h1>
<a href="../16">
C#高级编程(第3版)【全文连载】
</a>
</h1>
<div style="text-align: center; font-size: 15px">
<a href="100165555.htm">
19.4.1 Form类
</a>
</div>
<div style="text-align: center; font-size: 15px">
<a class="url" href="../../default.htm">http://book.csdn.net/</a>
2006-10-13 14:41:00
</div>
<div style="margin: 0px auto; width: 700px; border: solid 1px #0b5f98;">
<div style="float: left; width: 16px; background-color: #0b5f98; color: White; padding: 1px;">
图书导读
</div>
<div style="float: right; width: 670px; text-align: left; line-height: 16pt; padding-left: 2px">
<!--导读-->
<h1 id="divCurrentNode" style="color: #b83507; width: 100%; text-align: left; font-size: 12px; padding-left: 2px">当前章节:<a href='100165555.htm'><font color='red'>19.4.1 Form类</font></a></h1>
<div id="divRelateNode" style="padding-left: 2px">
<div style='float:left;width:49%'>·<a href='100165552.htm'>19.3.18 Menu控件</a></div><div style='float:right;width:49%'>·<a href='100165553.htm'>19.3.19 ToolBar控件</a></div><div style='float:left;width:49%'>·<a href='100165554.htm'>19.4 窗体</a></div><div style='float:right;width:49%'>·<a href='100165556.htm'>19.4.2 多文档界面</a></div><div style='float:left;width:49%'>·<a href='100165557.htm'>19.4.3 定制控件</a></div><div style='float:right;width:49%'>·<a href='100165558.htm'>19.5 小结</a></div></div>
</div>
</div>
</div>
<!-- main -->
<div id="main">
<div id="text"> <link href="css.css" rel="stylesheet" type="text/css" /><h3 style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 0cm; MARGIN-RIGHT: 0cm; FTEL: 8.15pt"><span lang="EN-US">19.4.1 Form</span><span style="FONT-FAMILY: 黑体">类</span></h3>
<p class="MsoNormal"><span lang="EN-US">Windows</span><span style="FONT-FAMILY: 宋体">客户应用程序可以包含一个窗体或上百个窗体。它们可以是基于</span><span lang="EN-US">SDI(</span><span style="FONT-FAMILY: 宋体">单文档界面,</span><span lang="EN-US">Single Document Interface)</span><span style="FONT-FAMILY: 宋体">或</span><span lang="EN-US">MDI(</span><span style="FONT-FAMILY: 宋体">多文档界面,</span><span lang="EN-US">Multiple Document Interface)</span><span style="FONT-FAMILY: 宋体">的应用程序。但无论怎样,</span><span lang="EN-US">System.Windows.Forms.Form</span><span style="FONT-FAMILY: 宋体">类都是</span><span lang="EN-US">Windows</span><span style="FONT-FAMILY: 宋体">客户应用程序的核心。</span><span lang="EN-US">Form</span><span style="FONT-FAMILY: 宋体">类派生于</span><span lang="EN-US">ContainerControl</span><span style="FONT-FAMILY: 宋体">,</span><span lang="EN-US">ContainerControl</span><span style="FONT-FAMILY: 宋体">又派生于</span><span lang="EN-US">ScrollableControl</span><span style="FONT-FAMILY: 宋体">,</span><span lang="EN-US">ScrollableControl</span><span style="FONT-FAMILY: 宋体">则派生于</span><span lang="EN-US">Control</span><span style="FONT-FAMILY: 宋体">类。因此可以假定,窗体可以是其他控件的容器,当所包含的控件在客户区域中显示不下时可以滚动显示,窗体可以拥有与其他控件相同的属性、方法和事件。所以,</span><span lang="EN-US">Form</span><span style="FONT-FAMILY: 宋体">类相当复杂。本节就介绍这些功能。</span></p>
<h4 style="FTEL: 21.45pt"><span lang="EN-US">1. </span><span style="FONT-FAMILY: 黑体">窗体的实例化和释放</span></h4>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">理解创建窗体的过程是很重要的。我们要完成的工作取决于编写初始化代码的位置。对于实例,事件以如下顺序发生:</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'"> </span></span><span style="FONT-FAMILY: 宋体">构造函数</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'"> </span></span><span lang="EN-US">Load</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'"> </span></span><span lang="EN-US">Activated</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'"> </span></span><span lang="EN-US">Closing</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'"> </span></span><span lang="EN-US">Closed</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'"> </span></span><span lang="EN-US">Deactivate</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">前</span><span lang="EN-US">3</span><span style="FONT-FAMILY: 宋体">个事件在初始化过程中发生。根据初始化的类型,可以确定要关联哪个事件。这个类的构造函数在对象的实例化过程中执行。</span><span lang="EN-US">Load</span><span style="FONT-FAMILY: 宋体">事件在对象实例化后,窗体可见之前发生。在引发</span><span lang="EN-US">Load</span><span style="FONT-FAMILY: 宋体">事件时,窗体还不存在,处在实例化过程中,但不可见。在构造函数执行过程中,窗体还不存在,处在实例化过程中。</span><span lang="EN-US">Activated</span><span style="FONT-FAMILY: 宋体">事件在窗体处于可见状态并处于当前状态时发生。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">有一种情形会略微改动一下这个事件执行顺序。如果在窗体构造函数执行的过程中,</span><span lang="EN-US">Visible</span><span style="FONT-FAMILY: 宋体">属性设置为</span><span lang="EN-US">true</span><span style="FONT-FAMILY: 宋体">,或调用了</span><span lang="EN-US">Show</span><span style="FONT-FAMILY: 宋体">方法</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">它把</span><span lang="EN-US">Visible</span><span style="FONT-FAMILY: 宋体">属性设置为</span><span lang="EN-US">true)</span><span style="FONT-FAMILY: 宋体">,就会立即引发</span><span lang="EN-US">Load</span><span style="FONT-FAMILY: 宋体">事件。这也会使窗体可见,并处于当前状态,所以还会引发</span><span lang="EN-US">Activate</span><span style="FONT-FAMILY: 宋体">事件。如果在设置</span><span lang="EN-US">Visible</span><span style="FONT-FAMILY: 宋体">属性后还有代码,就执行这些代码。所以启动事件的执行顺序如下所示:</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'"> </span></span><span style="FONT-FAMILY: 宋体">构造函数,执行到</span><span lang="EN-US">Visible = true</span><span style="FONT-FAMILY: 宋体">为止</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'"> </span></span><span lang="EN-US">Load</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'"> </span></span><span lang="EN-US">Activate</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'"> </span></span><span style="FONT-FAMILY: 宋体">构造函数,执行</span><span lang="EN-US">Visible = true</span><span style="FONT-FAMILY: 宋体">之后的代码</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">这会产生一些未预科到的结果。最好在构造函数中进行尽可能多的初始化。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">关闭窗体时会发生什么情况?</span><span lang="EN-US">Closing</span><span style="FONT-FAMILY: 宋体">事件可以取消处理,它把</span><span lang="EN-US">CancelEventArgs</span><span style="FONT-FAMILY: 宋体">作为一个参数,如果把</span><span lang="EN-US">Cancel</span><span style="FONT-FAMILY: 宋体">属性设置为</span><span lang="EN-US">true</span><span style="FONT-FAMILY: 宋体">,就会取消该事件,窗体仍处于打开状态。</span><span lang="EN-US">Closing</span><span style="FONT-FAMILY: 宋体">事件在窗体关闭时发生,而</span><span lang="EN-US">Closed</span><span style="FONT-FAMILY: 宋体">事件在窗体关闭后发生。这两个事件都允许执行必要的清理工作。注意</span><span lang="EN-US">Deactivate</span><span style="FONT-FAMILY: 宋体">事件在窗体关闭后发生,这是另一个可能产生难以查找的错误的来源。确保不在</span><span lang="EN-US">Deactivate</span><span style="FONT-FAMILY: 宋体">事件中执行防止窗体被正常垃圾收集的操作。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">如果调用</span><span lang="EN-US">Application.Exit()</span><span style="FONT-FAMILY: 宋体">方法,且当前有一个或多个窗体处于打开状态,就不会引发</span><span lang="EN-US">Closing</span><span style="FONT-FAMILY: 宋体">和</span><span lang="EN-US">Closed</span><span style="FONT-FAMILY: 宋体">事件。如果打开了正要清理的文件或数据库连接,这就是一个需要考虑的问题,此时应调用</span><span lang="EN-US">Dispose</span><span style="FONT-FAMILY: 宋体">方法,所以另一种更好的方法是把大多数清理代码放在</span><span lang="EN-US">Dispose</span><span style="FONT-FAMILY: 宋体">方法中。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">与窗体启动相关的一些属性有</span><span lang="EN-US">StartPosition</span><span style="FONT-FAMILY: 宋体">、</span><span lang="EN-US">ShowInTaskbar</span><span style="FONT-FAMILY: 宋体">和</span><span lang="EN-US">TopMost</span><span style="FONT-FAMILY: 宋体">。</span><span lang="EN-US">StartPosition</span><span style="FONT-FAMILY: 宋体">可以是</span><span lang="EN-US">FormStartPosition</span><span style="FONT-FAMILY: 宋体">枚举中的一个值:</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'"> </span></span><span lang="EN-US">CenterParent</span><span style="FONT-FAMILY: 宋体">:窗体位于父窗体的客户区域中心。</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'"> </span></span><span lang="EN-US">CenterScreen</span><span style="FONT-FAMILY: 宋体">:窗体位于当前屏幕的中心。</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'"> </span></span><span lang="EN-US">Manual</span><span style="FONT-FAMILY: 宋体">:窗体的位置根据</span><span lang="EN-US">Location</span><span style="FONT-FAMILY: 宋体">属性的值来确定。</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'"> </span></span><span lang="EN-US">WindowsDefaultBounds</span><span style="FONT-FAMILY: 宋体">:窗体位于默认的</span><span lang="EN-US">Windows</span><span style="FONT-FAMILY: 宋体">位置,使用默认的大小。</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'"> </span></span><span lang="EN-US">WindowsDefaultLocation</span><span style="FONT-FAMILY: 宋体">:窗体位于默认的</span><span lang="EN-US">Windows</span><span style="FONT-FAMILY: 宋体">位置,但其大小根据</span><span lang="EN-US">Size</span><span style="FONT-FAMILY: 宋体">属性来定。</span></p>
<p class="MsoNormal"><span lang="EN-US">ShowInTaskbar</span><span style="FONT-FAMILY: 宋体">属性确定窗体是否应在任务栏上可见。如果窗体是一个子窗体,且只希望父窗体显示在任务栏上时,才使用这个属性。</span><span lang="EN-US">TopMost</span><span style="FONT-FAMILY: 宋体">属性指定窗体在应用程序启动时位于最上面,即使窗体没有立即获得焦点,也位于最上面。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">为了让用户与应用程序交互,用户必须能看到窗体。利用</span><span lang="EN-US">Show</span><span style="FONT-FAMILY: 宋体">和</span><span lang="EN-US">ShowDialog</span><span style="FONT-FAMILY: 宋体">方法就可以实现这一点。</span><span lang="EN-US">Show</span><span style="FONT-FAMILY: 宋体">方法仅使窗体对用户可见。下面的代码演示了如何创建一个窗体,并把它显示给用户。假定要显示的窗体叫做</span><span lang="EN-US">MyFormClass</span><span style="FONT-FAMILY: 宋体">:</span></p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -