为 Windows 窗体应用程序(.NET)添加 MDI 支持






3.70/5 (13投票s)
2006年3月6日
4分钟阅读

103924

1863
一篇关于为 .NET 应用程序添加 MDI 支持的文章。
引言
本文将演示一种简单有效的方法,可在您的 Windows 窗体应用程序(.NET)中添加 MDI 支持!MSDN 上有很多示例,但没有一个将示例程序整合在一起。为应用程序添加 MDI 支持可以帮助您管理多个文件或其他形式的数据,所有这些都通过一个模板完成。这将大大减少您需要编写的代码量,并使用户能够舒适地使用能够同时处理大量数据的应用程序。本文将向您展示如何设置一个基本的 MDI 支持应用程序,该应用程序使用 RichEdit
控件提供文本编辑器功能。
使用代码
在源代码 zip 文件中,您会找到已完成所有步骤的整个项目。
首先,本文主要面向 Microsoft Visual C++ .NET 2003 用户。不保证此代码能在之前的或之后的版本中正常工作!让我们从打开一个空白的 Microsoft 窗体应用程序(.NET)开始,并将其命名为 MDIApp。
单击“确定”,您将看到一个名为 Form1
的空白窗体。由于这需要您修改许多行和文件名,因此我不会详细说明更改名称的步骤,但如果您决定将 Form1
更改为其他名称,则在本文的其余部分中必须将 Form1
替换为您选择的新名称。
接下来,单击该窗体并打开“属性”窗口。在 ismdicontainer
下,将值更改为 true
。这将告知编译器,我们希望将此窗体作为 MDI 父窗体。如果您愿意,可以更改其他值以使窗体外观符合您的要求。我建议将 WindowState
更改为 Maximize
,以生成一个全屏窗口。
既然有了 MDI 容器,我们就需要添加菜单。将 MainMenu
控件从工具箱拖到窗体上。创建一个顶层菜单项,其 Text
属性设置为 &File,并带有子菜单项 &New 和 E&xit。另外,创建一个名为 &Window 的顶层菜单项。选择与 &Window 菜单项对应的菜单项,并将 MdiList
属性设置为 true
。这将告知我们的应用程序,我们希望它将子窗口作为子菜单添加到 &Window 菜单的末尾。
现在我们有了父窗口,是时候创建子窗口了。在“解决方案资源管理器”中,右键单击项目,指向“添加”,然后选择“添加新项”。在“添加新项”对话框中,从“模板”窗格中选择“Windows 窗体应用程序(.NET)”。在“名称”框中,将窗体命名为 Form2(同样,如果您更改此名称,也需要进行相应替换)。单击“打开”按钮将窗体添加到项目中。Form2
将默认打开。此窗体将成为 MDI 子窗体的模板。即使您有机会更改子窗口的 Opacity
属性,**也不要这样做!** 这会导致绘制问题。
将 RichTextBox
控件从“工具箱”拖到窗体上。在“属性”窗口中,将 Anchor
属性设置为 Top, Left
,将 Dock
属性设置为 Fill
。这将使我们的 RichTextBox
填满整个子窗口!为 New 菜单项创建 Click
事件处理程序。这最好通过在设计模式下双击菜单上的 New 子项来完成。
在创建的新函数下添加以下代码:
private: System::Void menuItem2_Click(System::Object * sender,
System::EventArgs * e)
{
// This gets a new instance of our child window.
Form2* newMDIChild = new Form2();
// Tells our new child window
// what is our parent window.
newMDIChild->MdiParent = this;
// Shows the new form.
// Don't confuse this with ShowDialog!
newMDIChild->Show();
}
这将创建一个具有我们所设计样式的子窗口。滚动到顶部并添加下面的行...
#include "Form2.h"
返回到我们的设计视图,为 Exit 菜单项创建 Click
事件处理程序。
在为 Exit 菜单项创建的新函数下添加以下代码:
private: System::Void menuItem3_Click(System::Object * sender,
System::EventArgs * e)
{
this->Close(); // Closes the application!
}
按 F5 运行应用程序。请注意,通过选择“文件”菜单中的“新建”,您可以创建新的 MDI 子窗体,这些窗体将在“窗口”菜单中进行跟踪。
关注点
在我了解 .NET 的 MDI 之前,我被迫使用 Microsoft 的替代方法来创建我的 MFC 程序。这对我不熟悉 MFC 且不知道许多函数的人来说没什么用。另外,添加 XP 支持很有用,这样 XP 用户就能看到更简洁的设计。它还有助于添加状态栏以填充窗口底部的空白区域。最后一项是我个人偏好,但我建议您将子窗口的 WindowState
设置为 Maximize
以获得更好的外观。
历史
到目前为止,这是我制作的第一篇文章和此文章的第一个版本!;-)