C#中,怎么实现在第一个窗体上点一个按钮,出现第二个窗体?
在按钮的click事件中添加以下代码
private void button1_Click(object sender, EventArgs e)
{
Form form2 = new Form();
form2.Show();
}
Show()弹出非模式化的窗体
模式窗体,在关闭或隐藏前无法切换到主窗体。
非模式窗体,变换焦点使不必关闭窗体
总结:显示重要的信息,还是用模式窗体,如删除文件,可以确保用户正真想要删除的是该文件
非模式的,窗体访问的顺序没有办法得知,比较适合显示程序的一些相关信息。
在该事件处理程序内,插入类似于下面代码示例的代码,以创建和显示作为 Form1 的 MDI 子级的 Form2 新实例。
private void openToolStripMenuItem_Click(object sender, EventArgs e) { Form2 newMDIChild = new Form2(); // Set the parent form of the child window. newMDIChild.MdiParent = this; // Display the new form. newMDIChild.Show(); }
在设计时创建 MDI 父窗体
-
创建 Windows 应用程序项目。有关更多信息,请参见如何:创建 Windows 应用程序项目。
-
在“属性”窗口中,将 IsMDIContainer 属性设置为“true”。
这将该窗体指定为子窗口的 MDI 容器。
说明: 当在“属性”窗口中设置属性时,如果愿意,也可将 WindowState 属性设置为“Maximized”,因为当父窗体最大化时操作 MDI 子窗口最为容易。另请注意,MDI 父窗体的边缘将采用系统颜色(在 Windows 系统控制面板中设置),而不是采用借助于 Control..::.BackColor 属性设置的背景色。
-
将“MainMenu”组件从“工具箱”拖到窗体上。创建一个“Text”属性设置为“文件(&F)”的顶级菜单项,且带有名为“新建(&N)”和“关闭(&C)”的子菜单项。再创建一个名为“窗口(&W)”的顶级菜单项。
第一个菜单将在运行时创建并隐藏菜单项,而第二个菜单将跟踪打开的 MDI 子窗口。此时,您已创建了一个 MDI 父窗口。
-
按 F5 运行应用程序。
创建 MDI 子窗体
-
创建菜单结构中包含顶级菜单项“文件”和“窗口”及菜单项“新建”和“关闭”的 MDI 父窗体。
-
在“属性”窗口顶部的下拉列表中,选择与“窗口(&W)”菜单项对应的菜单项,然后将 MdiList 属性设置为“true”。
这将使“窗口”菜单能够维护打开的 MDI 子窗口的列表(活动子窗口旁有一个复选标记)。
-
在“解决方案资源管理器”中右击项目,指向“添加”,然后选择“添加新项”。
此窗体将作为 MDI 子窗体的模板。
-
在“添加新项”对话框中,选择“Windows 窗体”(在 Visual Basic 或 Visual C# 中)或从“模板”窗格中选择“Windows 窗体应用程序 (.NET)”(在 Visual C++ 中)。在“名称”框中,命名窗体 Form2。单击“打开”按钮将该窗体添加到项目中。
“Windows 窗体设计器”打开,其中显示 Form2。
-
将一个“RichTextBox”控件从“工具箱”中拖到窗体上。
-
在“属性”窗口中,将 Anchor 属性设置为“Top, Left”,并将 Dock 属性设置为“Fill”。
这导致即使调整 MDI 子窗体的大小,RichTextBox 控件也会完全填充该窗体的区域。
-
为“新建”菜单项创建 Click 事件处理程序。有关创建事件处理程序的更多信息,请参见 如何:使用设计器创建事件处理程序。
-
插入与下面的代码相似的代码,以便在用户单击“新建”菜单项时创建新的 MDI 子窗体
-
说明: 在下面的示例中,事件处理程序处理 MenuItem2 的 Click 事件。请注意,您的“新建”菜单项可能不是 Menuprotectedvoid MDIChildNew_Click(object sender, System.EventArgs e){ Form2 newMDIChild = new Form2(); // Set the Parent Form of the Child window. newMDIChild.MdiParent = this; // Display the new form.newMDIChild.Show(); } Item2,这取决于应用程序结构的具体情况。
protected void MDIChildNew_Click(object sender, System.EventArgs e){
}
9、按 F5 运行应用程序。请注意,通过从“文件”菜单中选择“新建”,可创建新的 MDI 子窗体,该子窗体在“窗口”菜单中被跟踪。
有时需要提供一个在控件上操作的命令,而该控件在当前活动的子窗体上具有焦点。例如,假设要将子窗体文本框中的选定文本复制到剪贴板。可以创建这样一个过程:使用标准“编辑”菜单上“复制”菜单项的 Click 事件将选定的文本复制到剪贴板。
因为一个 MDI 应用程序可以有同一个子窗体的多个实例,因此该过程需要知道使用哪个窗体。若要指定正确的窗体,请使用 ActiveMdiChild 属性,该属性返回具有焦点的或最近活动的子窗体。
当窗体上有数个控件时,还需要指定哪个控件是活动的。与 ActiveMdiChild 属性一样,ActiveControl 属性返回活动子窗体中具有焦点的控件。下面的过程阐释了可以从子窗体菜单、MDI 窗体菜单或工具栏按钮调用的复制过程。
确定活动的 MDI 子窗体(将它的文本复制到剪贴板)
-
在方法中,将活动子窗体的活动控件的文本复制到剪贴板。
说明: 此示例假定有一个 MDI 父窗体 (Form1),其中包含一个或多个含有 RichTextBox 控件的 MDI 子窗口。有关更多信息,请参见创建 MDI 父窗体。
protected void mniCopy_Click (object sender, System.EventArgs e) { // Determine the active child form. Form activeChild = this.ActiveMdiChild; // If there is an active child form, find the active control, which // in this example should be a RichTextBox.if (activeChild != null) { try { RichTextBox theBox = (RichTextBox)activeChild.ActiveControl; if (theBox != null) { // Put the selected text on the Clipboard. Clipboard.SetDataObject(theBox.SelectedText); } } catch { MessageBox.Show("You need to select a RichTextBox."); } } }
通常,在多文档界面 (MDI) 应用程序的上下文中,需要将数据发送到活动子窗口,例如用户将数据从剪贴板中粘贴到 MDI 应用程序中。
说明: |
---|
有关检验哪个子窗口具有焦点以及将子窗口内容发送到剪贴板的信息,请参见确定活动 MDI 子窗口。 |
将数据从剪贴板发送到活动 MDI 子窗口
-
在方法中,将剪贴板上的文本复制到活动子窗体的活动控件。
说明: 此示例假定有一个 MDI 父窗体 (Form1),其中包含一个或多个含有 RichTextBox 控件的 MDI 子窗口。有关更多信息,请参见创建 MDI 父窗体。
protected void mniPaste_Click (object sender, System.EventArgs e) { // Determine the active child form. Form activeChild = this.ParentForm.ActiveMdiChild; // If there is an active child form, find the active control, which // in this example should be a RichTextBox. if (activeChild != null) { try { RichTextBox theBox = (RichTextBox)activeChild.ActiveControl; if (theBox != null) { // Create a new instance of the DataObject interface. IDataObject data = Clipboard.GetDataObject(); // If the data is text, then set the text of the // RichTextBox to the text in the clipboard. if(data.GetDataPresent(DataFormats.Text)) { theBox.SelectedText = data.GetData(DataFormats.Text).ToString(); } } } catch { MessageBox.Show("You need to select a RichTextBox."); } } }