C#父子窗体

C#中,怎么实现在第一个窗体上点一个按钮,出现第二个窗体?

在按钮的click事件中添加以下代码
private void button1_Click(object sender, EventArgs e)
{
Form form2 = new Form();
form2.Show();
}

 

C# Show() 与 ShowDialog()区别

ShowDialog()弹出模式化的窗体

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 父窗体

  1. 创建 Windows 应用程序项目。有关更多信息,请参见如何:创建 Windows 应用程序项目

  2. “属性”窗口中,将 IsMDIContainer 属性设置为“true”

    这将该窗体指定为子窗口的 MDI 容器。

    C#父子窗体说明:

    当在“属性”窗口中设置属性时,如果愿意,也可将 WindowState 属性设置为“Maximized”,因为当父窗体最大化时操作 MDI 子窗口最为容易。另请注意,MDI 父窗体的边缘将采用系统颜色(在 Windows 系统控制面板中设置),而不是采用借助于 Control..::.BackColor 属性设置的背景色。

  3. “MainMenu”组件从“工具箱”拖到窗体上。创建一个“Text”属性设置为“文件(&F)”的顶级菜单项,且带有名为“新建(&N)”“关闭(&C)”的子菜单项。再创建一个名为“窗口(&W)”的顶级菜单项。

    第一个菜单将在运行时创建并隐藏菜单项,而第二个菜单将跟踪打开的 MDI 子窗口。此时,您已创建了一个 MDI 父窗口。

  4. 按 F5 运行应用程序。

创建 MDI 子窗体

  1. 创建菜单结构中包含顶级菜单项“文件”“窗口”及菜单项“新建”“关闭”的 MDI 父窗体。 

  2. “属性”窗口顶部的下拉列表中,选择与“窗口(&W)”菜单项对应的菜单项,然后将 MdiList 属性设置为“true”

    这将使“窗口”菜单能够维护打开的 MDI 子窗口的列表(活动子窗口旁有一个复选标记)。

  3. “解决方案资源管理器”中右击项目,指向“添加”,然后选择“添加新项”

    此窗体将作为 MDI 子窗体的模板。

    C#父子窗体说明:

    在此步骤中创建的 MDI 子窗体是标准的 Windows 窗体。因此,它具有 Opacity 属性,该属性允许控制窗体的透明度。但是,Opacity 属性旨在用于顶级窗口。不要将其与 MDI 子窗体同时使用,否则可能会引起绘制问题。

  4. “添加新项”对话框中,选择“Windows 窗体”(在 Visual Basic 或 Visual C# 中)或从“模板”窗格中选择“Windows 窗体应用程序 (.NET)”(在 Visual C++ 中)。在“名称”框中,命名窗体 Form2。单击“打开”按钮将该窗体添加到项目中。

    “Windows 窗体设计器”打开,其中显示 Form2

  5. 将一个“RichTextBox”控件从“工具箱”中拖到窗体上。

  6. “属性”窗口中,将 Anchor 属性设置为“Top, Left”,并将 Dock 属性设置为“Fill”

    这导致即使调整 MDI 子窗体的大小,RichTextBox 控件也会完全填充该窗体的区域。

  7. “新建”菜单项创建 Click 事件处理程序。有关创建事件处理程序的更多信息,请参见 如何:使用设计器创建事件处理程序

  8. 插入与下面的代码相似的代码,以便在用户单击“新建”菜单项时创建新的 MDI 子窗体

  9.  

    C#父子窗体说明:

    在下面的示例中,事件处理程序处理 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){
   Form2 newMDIChild = new Form2();
   // Set the Parent Form of the Child window.
   newMDIChild.MdiParent = this;
   // Display the new form.
   newMDIChild.Show();
}
9、按 F5 运行应用程序。请注意,通过从“文件”菜单中选择“新建”,可创建新的 MDI 子窗体,该子窗体在“窗口”菜单中被跟踪。

 

 
如何:确定活动的 MDI 子窗体

有时需要提供一个在控件上操作的命令,而该控件在当前活动的子窗体上具有焦点。例如,假设要将子窗体文本框中的选定文本复制到剪贴板。可以创建这样一个过程:使用标准“编辑”菜单上“复制”菜单项的 Click 事件将选定的文本复制到剪贴板。

因为一个 MDI 应用程序可以有同一个子窗体的多个实例,因此该过程需要知道使用哪个窗体。若要指定正确的窗体,请使用 ActiveMdiChild 属性,该属性返回具有焦点的或最近活动的子窗体。

当窗体上有数个控件时,还需要指定哪个控件是活动的。与 ActiveMdiChild 属性一样,ActiveControl 属性返回活动子窗体中具有焦点的控件。下面的过程阐释了可以从子窗体菜单、MDI 窗体菜单或工具栏按钮调用的复制过程。

确定活动的 MDI 子窗体(将它的文本复制到剪贴板)

  • 在方法中,将活动子窗体的活动控件的文本复制到剪贴板。

    C#父子窗体说明:

    此示例假定有一个 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 应用程序中。

C#父子窗体说明:

有关检验哪个子窗口具有焦点以及将子窗口内容发送到剪贴板的信息,请参见确定活动 MDI 子窗口

将数据从剪贴板发送到活动 MDI 子窗口

  • 在方法中,将剪贴板上的文本复制到活动子窗体的活动控件。

    C#父子窗体说明:

    此示例假定有一个 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."); } } }
如何:排列 MDI 子窗体
 

应用程序常包含对打开的 MDI 子窗体进行操作的菜单命令,如“平铺”、“层叠”和“排列”。可在 MDI 父窗体中使用 LayoutMdi 方法和 MdiLayout 枚举重新排列子窗体。

LayoutMdi 方法可以使用四个不同 MdiLayout 枚举值中的一个。这些枚举值将子窗体显示为层叠、水平平铺或垂直平铺,或者显示为排列在 MDI 窗体下部的子窗体图标。

这些方法常用作由菜单项的 Click 事件调用的事件处理程序。这样,文本为“层叠窗口”的菜单项可在 MDI 子窗口上产生所需的效果。

排列子窗体

  • 在方法中,使用 LayoutMdi 方法设置 MDI 父窗体的 MdiLayout 枚举。下面的示例对 MDI 父窗体 (Form1) 的子窗口使用 MdiLayout 枚举的 Cascade 设置。在“层叠窗口”菜单项的 Click 事件的事件处理程序中,代码将使用枚举。

    protected void CascadeWindows_Click(object sender, System.EventArgs e){this.LayoutMdi(System.Windows.Forms.MdiLayout.Cascade); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值