方法: アクティブな MDI 子フォームを特定する

場合によっては、現在アクティブな子フォームにフォーカスがあるコントロールを操作するコマンドを提供する必要があります。 たとえば、子フォームのテキスト ボックスから選択したテキストをクリップボードにコピーするとします。 標準の [編集] メニューの [コピー] メニュー項目の Click イベントを使用して、選択したテキストをクリップボードにコピーするプロシージャを作成します。

MDI アプリケーションは、同じ子フォームのインスタンスを多数持つことができるため、使用するフォームをプロシージャに指定する必要があります。 正しいフォームを指定するには、ActiveMdiChild プロパティを使用します。これは、フォーカスがある、または直前にアクティブになっていた子フォームを返します。

フォームに複数のコントロールがある場合は、アクティブなコントロールを指定する必要もあります。 ActiveMdiChild プロパティと同様に、ActiveControl プロパティは、アクティブな子フォームにフォーカスがあるコントロールを返します。 次のプロシージャは、子フォーム メニュー、MDI フォームのメニュー、またはツールバー ボタンから呼び出すことができるコピー プロシージャを示しています。

アクティブな MDI 子を特定 (してそのテキストをクリップボードにコピー) するには

  1. メソッド内で、アクティブな子フォームのアクティブなコントロールのテキストをクリップボードにコピーします。

    注意

    この例では、RichTextBox コントロールを含んだ MDI 子ウィンドウが 1 つ以上ある MDI 親フォーム (Form1) が存在することを前提としています。 詳細については、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  
          Dim theBox As RichTextBox = _  
            TryCast(activeChild.ActiveControl, RichTextBox)  
    
          If (Not theBox Is Nothing) Then  
             'Put selected text on Clipboard.  
             Clipboard.SetDataObject(theBox.SelectedText)  
          Else  
             MessageBox.Show("You need to select a RichTextBox.")  
          End If  
       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.");  
          }  
       }  
    }  
    

関連項目