次の方法で共有


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

更新 : 2007 年 11 月

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

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

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

アクティブな MDI 子フォームを判断してテキストをクリップボードにコピーするには

  • アクティブな子フォームにあるアクティブなコントロールからテキストをクリップボードにコピーするコードをメソッドに記述します。

    4s6dtf7z.alert_note(ja-jp,VS.90).gifメモ :

    この例では、MDI 親フォーム (Form1) は RichTextBox コントロールのある MDI 子ウィンドウを少なくとも 1 つ持っていることを前提としています。詳細については、「方法 : 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) アプリケーション