HOW TO:決定作用中的 MDI 子系
有時,您會想要提供一個在控制項執行的命令,而此控制項在目前作用中的子表單上取得焦點 (Focus)。 例如,假設您想要從子表單的文字方塊複製選取文字到剪貼簿。 您將會建立一個程序,使用標準 [編輯] 功能表中 [複製] 功能表項目的 Click 事件,將選取文字複製到剪貼簿。
由於 MDI 應用程式對於同一子表單可以有許多執行個體,因此程序需要知道應使用的表單是哪一個。 若要指定正確的表單,請使用 ActiveMdiChild 屬性,傳回取得焦點或最近變成作用中的子表單。
如果表單上有數個控制項,您也需要指定作用中的控制項是哪一個。 ActiveControl 屬性與 ActiveMdiChild 屬性類似,都會傳回在作用中子表單上取得焦點的控制項。 下列程序說明可從子表單功能表、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 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."); } } }