方法: アクティブな MDI 子フォームを特定する
場合によっては、現在アクティブな子フォームにフォーカスがあるコントロールを操作するコマンドを提供する必要があります。 たとえば、子フォームのテキスト ボックスから選択したテキストをクリップボードにコピーするとします。 標準の [編集] メニューの [コピー] メニュー項目の Click イベントを使用して、選択したテキストをクリップボードにコピーするプロシージャを作成します。
MDI アプリケーションは、同じ子フォームのインスタンスを多数持つことができるため、使用するフォームをプロシージャに指定する必要があります。 正しいフォームを指定するには、ActiveMdiChild プロパティを使用します。これは、フォーカスがある、または直前にアクティブになっていた子フォームを返します。
フォームに複数のコントロールがある場合は、アクティブなコントロールを指定する必要もあります。 ActiveMdiChild プロパティと同様に、ActiveControl プロパティは、アクティブな子フォームにフォーカスがあるコントロールを返します。 次のプロシージャは、子フォーム メニュー、MDI フォームのメニュー、またはツールバー ボタンから呼び出すことができるコピー プロシージャを示しています。
アクティブな MDI 子を特定 (してそのテキストをクリップボードにコピー) するには
メソッド内で、アクティブな子フォームのアクティブなコントロールのテキストをクリップボードにコピーします。
注意
この例では、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."); } } }
関連項目
.NET Desktop feedback