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