100165556.htm

来自「C#高级编程(第三版),顶死你们。。 。up」· HTM 代码 · 共 108 行 · 第 1/2 页

HTM
108
字号
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="ES">&nbsp; ///&lt;summary&gt;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="ES">&nbsp; ///Summary description for StartUp.</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="ES">&nbsp; ///&lt;/summary&gt;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="ES">&nbsp; public class StartUp</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="ES">&nbsp; {</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="ES">&nbsp;&nbsp;&nbsp; [STAThread]</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="ES">&nbsp;&nbsp;&nbsp; static void Main()</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="ES">&nbsp;&nbsp;&nbsp; {</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="ES">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Application.Run(new ParentForm());</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="ES">&nbsp;&nbsp;&nbsp; }</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="ES">&nbsp;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="ES">&nbsp; }</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="ES">}</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">接着添加一个新的</span><span lang="ES">Form</span><span style="FONT-FAMILY: 宋体">类,命名为</span><span lang="ES">ParentForm</span><span style="FONT-FAMILY: 宋体">,或者把类</span><span lang="ES">Form1</span><span style="FONT-FAMILY: 宋体">重命名为</span><span lang="ES">ParentForm</span><span style="FONT-FAMILY: 宋体">。如果重命名</span><span lang="ES">Form1</span><span style="FONT-FAMILY: 宋体">,就一定要从中删除</span><span lang="ES">Main</span><span style="FONT-FAMILY: 宋体">方法,因为我们已经在</span><span lang="ES">StartUp</span><span style="FONT-FAMILY: 宋体">类中启动了应用程序。还必须告诉</span><span lang="ES">ParentForm</span><span style="FONT-FAMILY: 宋体">,它的确是</span><span lang="ES">MDI</span><span style="FONT-FAMILY: 宋体">子窗体的父窗体。为此,要把</span><span lang="ES">IsMdiContainer</span><span style="FONT-FAMILY: 宋体">设置为</span><span lang="ES">true</span><span style="FONT-FAMILY: 宋体">。如果在设计器中创建窗体,就应注意背景已变成暗灰色。这说明这是一个</span><span lang="ES">MDI</span><span style="FONT-FAMILY: 宋体">父窗体。仍可以在窗体中添加控件,但一般不要这么做。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">然后创建子窗体。在项目中添加一个新窗体,命名为</span><span lang="ES">ChildForm</span><span style="FONT-FAMILY: 宋体">。可以在其中添加需要的控件。再添加另一个新窗体,命名为</span><span lang="ES">AnotherChildForm</span><span style="FONT-FAMILY: 宋体">。还可以在这个窗体上添加需要的控件。目前,这些都是标准的窗体,可以出现在任何项目中。在设计期间还不能确定这些窗体是</span><span lang="ES">MDI</span><span style="FONT-FAMILY: 宋体">父窗体的子窗体。而应设置窗体的</span><span lang="ES">MdiParent</span><span style="FONT-FAMILY: 宋体">属性,在运行期间确定。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">为了说明其工作原理,下面给</span><span lang="ES">ParentForm</span><span style="FONT-FAMILY: 宋体">添加一个</span><span lang="ES">MainMenu</span><span style="FONT-FAMILY: 宋体">控件。在顶部添加</span><span lang="ES">File</span><span style="FONT-FAMILY: 宋体">菜单,在该菜单的下面添加</span><span lang="ES">New</span><span style="FONT-FAMILY: 宋体">菜单项。在</span><span lang="ES">New Click</span><span style="FONT-FAMILY: 宋体">事件处理程序中,可以实例化一个新的</span><span lang="ES">ChildForm</span><span style="FONT-FAMILY: 宋体">,并显示它。代码如下:</span></p>
<p class="2" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="ES">private void mnuFileNew_Click(object sender, System.EventArgs e)</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="ES">{</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="ES">&nbsp; ChildForm frm = new ChildForm();</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="ES">&nbsp; frm.Name = string.Concat(&quot;MDIChildForm&quot;, this.MdiChildren.Length.ToString());</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="ES">&nbsp; frm.Text = frm.Name;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="ES">&nbsp; frm.MdiParent = this;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="ES">&nbsp; frm.Show();</span></p>
<p class="2" style="MARGIN-TOP: 0cm; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="ES">}</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">创建了一个新的</span><span lang="ES">ChildForm</span><span style="FONT-FAMILY: 宋体">,把它赋予对象变量</span><span lang="ES">frm</span><span style="FONT-FAMILY: 宋体">,再把字符串</span><span lang="ES">MDIChildForm</span><span style="FONT-FAMILY: 宋体">和父窗体中</span><span lang="ES">MdiChildren</span><span style="FONT-FAMILY: 宋体">属性的长度连接起来,作为新窗体的名称。</span><span lang="ES">MdiChildren</span><span style="FONT-FAMILY: 宋体">属性是父窗体中当前打开的</span><span lang="ES">MDI</span><span style="FONT-FAMILY: 宋体">子窗体数组。然后,把窗体的</span><span lang="ES">Text</span><span style="FONT-FAMILY: 宋体">属性设置为新生成的名称。这个名称将显示在窗体的标题栏上。下一行代码把子窗体的</span><span lang="ES">MdiParent</span><span style="FONT-FAMILY: 宋体">属性设置为父窗体。现在,</span><span lang="ES">ChildForm</span><span style="FONT-FAMILY: 宋体">就是一个真正的</span><span lang="ES">MDI</span><span style="FONT-FAMILY: 宋体">子窗体了。最后,就是显示该窗体。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">如果单击</span><span lang="ES">New</span><span style="FONT-FAMILY: 宋体">菜单项</span><span lang="ES">3</span><span style="FONT-FAMILY: 宋体">次,就会得到如图</span><span lang="ES">19-9</span><span style="FONT-FAMILY: 宋体">所示的结果。</span></p>
<p class="MsoNormal"><span lang="ES">MDI</span><span style="FONT-FAMILY: 宋体">子窗体并不包含窗体的所有功能。如果添加另一个菜单项,命名为</span><span lang="ES">Another New</span><span style="FONT-FAMILY: 宋体">,就可以在它的单击事件中添加类似的代码。惟一是区别是创建一个新的</span><span lang="ES">AnotherChildForm</span><span style="FONT-FAMILY: 宋体">,而不是</span><span lang="ES">ChildForm</span><span style="FONT-FAMILY: 宋体">。如果单击</span><span lang="ES">New</span><span style="FONT-FAMILY: 宋体">菜单项两次,再单击</span><span lang="ES">Another New</span><span style="FONT-FAMILY: 宋体">菜单项两次,就会得到如图</span><span lang="ES">19-10</span><span style="FONT-FAMILY: 宋体">所示的结果。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">注意无论是哪个子窗体,数字都会继续递增。</span><span lang="ES">MdiChildren</span><span style="FONT-FAMILY: 宋体">属性仅包含一个</span><span lang="ES">Array</span><span style="FONT-FAMILY: 宋体">对象。创建为</span><span lang="ES">MdiChild</span><span style="FONT-FAMILY: 宋体">的所有子窗体都会添加到这个数组中。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">问题是,关闭子窗体的惟一方式是单击窗体右上角的关闭图标。必须给子窗体添加一个菜单,才能从容地关闭子窗体。在</span><span lang="ES">ChildForm</span><span style="FONT-FAMILY: 宋体">中添加一个新的</span><span lang="ES">MainMenu</span><span style="FONT-FAMILY: 宋体">。菜单中的第一个选项一般设置为</span><span lang="ES">File</span><span style="FONT-FAMILY: 宋体">。下一个选项是</span><span lang="ES">Edit</span><span style="FONT-FAMILY: 宋体">等。但在子窗体的菜单中不希望这样。在显示子窗体时,其菜单结构会自动与父窗体的菜单合并。如果父窗体的菜单已经包含</span><span lang="ES">File</span><span style="FONT-FAMILY: 宋体">、</span><span lang="ES">Edit</span><span style="FONT-FAMILY: 宋体">等,就会得到两个</span><span lang="ES">File</span><span style="FONT-FAMILY: 宋体">菜单,两个</span><span lang="ES">Edit</span><span style="FONT-FAMILY: 宋体">菜单,这并不是理想的解决方案。所以在</span><span lang="ES">ChildForm</span><span style="FONT-FAMILY: 宋体">中,应创建与子窗体相关的菜单结构。对于这个示例,把</span><span lang="ES">Chlid</span><span style="FONT-FAMILY: 宋体">菜单添加到顶级菜单。在它的下面是</span><span lang="ES">Close</span><span style="FONT-FAMILY: 宋体">菜单选项。现在运行示例,用一个菜单显示子窗体,新菜单就会与父窗体的菜单一起显示出来,而不只是显示子窗体的菜单。</span></p>
<p align="center"><span lang="ES"><img height="341" src="19/image009.jpg" width="428" alt="" /></span></p>
<p style="FTEL: 8.15pt" align="center"><span style="FONT-FAMILY: 宋体">图</span><span lang="ES">&nbsp; 19-9</span></p>
<p align="center"><span lang="ES"><img height="299" src="19/image010.jpg" width="384" alt="" /></span></p>
<p style="FTEL: 8.15pt" align="center"><span style="FONT-FAMILY: 宋体">图</span><span lang="ES">&nbsp; 19-10</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">另一个</span><span lang="ES">MDI</span><span style="FONT-FAMILY: 宋体">菜单选项是</span><span lang="ES">MdiList</span><span style="FONT-FAMILY: 宋体">属性。这个属性显示一组当前打开的子窗口。在父窗体中添加一个新的菜单选项,其菜单文本是</span><span lang="ES">Window</span><span style="FONT-FAMILY: 宋体">。把</span><span lang="ES">MergeOrder</span><span style="FONT-FAMILY: 宋体">顺序设置为</span><span lang="ES">3</span><span style="FONT-FAMILY: 宋体">,</span><span lang="ES">MdiList</span><span style="FONT-FAMILY: 宋体">属性设置为</span><span lang="ES">true</span><span style="FONT-FAMILY: 宋体">。现在打开几个子窗口,</span><span lang="ES">Window</span><span style="FONT-FAMILY: 宋体">菜单将总是位于最右端,因为它的</span><span lang="ES">MergeOrder</span><span style="FONT-FAMILY: 宋体">高于其他菜单。父窗体包含一组当前打开的窗口。菜单中的文本与子窗口标题中的文本相同</span><span lang="ES">(</span><span style="FONT-FAMILY: 宋体">子窗体的</span><span lang="ES">Text</span><span style="FONT-FAMILY: 宋体">属性</span><span lang="ES">)</span><span style="FONT-FAMILY: 宋体">。</span></p></div>
                <!-- page -->
                <div class="page" style="text-align: center">
                    <a href="100165555.htm">上一页</a>&nbsp;&nbsp;&nbsp;<a href="index.html">首页</a>&nbsp;&nbsp;&nbsp;<a href="100165557.htm">下一页</a>
                </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="divCurrentNode2" style="color: #b83507; width: 100%; text-align: left; font-size: 12px; padding-left: 2px">当前章节:<a href='100165556.htm'><font color='red'>19.4.2  多文档界面</font></a></h1>
                        <div id="divRealteNod2" style="padding-left: 2px">
                        <div style='float:left;width:49%'>·<a href='100165553.htm'>19.3.19  ToolBar控件</a></div><div style='float:right;width:49%'>·<a href='100165554.htm'>19.4  窗体</a></div><div style='float:left;width:49%'>·<a href='100165555.htm'>19.4.1  Form类</a></div><div style='float:right;width:49%'>·<a href='100165557.htm'>19.4.3  定制控件</a></div><div style='float:left;width:49%'>·<a href='100165558.htm'>19.5  小结</a></div><div style='float:right;width:49%'>·<a href='100165559.htm'>20.1  理解绘图规则</a></div></div>
                    </div>
                </div>
                </div>
        </div>
</body>
</html>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?