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

更新:2007 年 11 月

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

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

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

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

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

    说明:

    此示例假定有一个 MDI 父窗体 (Form1),其中包含一个或多个含有 RichTextBox 控件的 MDI 子窗口。有关更多信息,请参见创建 MDI 父窗体

    Public Sub mniCopy_Click(ByVal sender As Object, _
       ByVal e As System.EventArgs) Handles mniCopy.Click
    
       ' Determine the active child form.
       Dim activeChild As Form = Me.ActiveMDIChild
    
       ' If there is an active child form, find the active control, which
       ' in this example should be a RichTextBox.
       If (Not activeChild Is Nothing) Then
          Try
             Dim theBox As RichTextBox = _
             Ctype(activeChild.ActiveControl, RichTextBox)
             If (Not theBox Is Nothing) Then
                ' Put selected text on Clipboard.
                Clipboard.SetDataObject(theBox.SelectedText)
             End If
          Catch
             MessageBox.Show("You need to select a RichTextBox.")
          End Try
       End If
    End Sub
    
    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.");
          }
       }
    }
    
    private void menuItem5_Click(System.Object sender, System.EventArgs e) 
    {
       // Determine the active child form.
       Form activeChild = this.get_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.get_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.set_SelectedText(data.GetData(DataFormats.Text).ToString());
                }
             }
          }
          catch(System.Exception exp)
          {
    
             MessageBox.Show("You need to select a RichTextBox.");
          }
       }
    }
    

请参见

任务

如何:创建 MDI 父窗体

如何:创建 MDI 子窗体

如何:将数据发送到活动的 MDI 子窗体

如何:排列 MDI 子窗体

其他资源

多文档界面 (MDI) 应用程序