Практическое руководство. Определение активной дочерней MDI-формы
В некоторых случаях требуется предоставить это команда, работающая на элементе управления, имеющий фокус на данный момент активной дочерней формы. Например предположим, что вы хотите копировать выделенный текст из текстового поля дочерней формы в буфер обмена. Необходимо создать процедуру, которая копирует выделенный текст в буфер обмена с помощью Click событие копию элемента меню на стандартные меню "Правка".
Поскольку MDI-приложения можно создать несколько экземпляров того же дочерней формы, процедура должна знать, какую форму для использования. Чтобы указать требуемую форму, используйте ActiveMdiChild свойство, которое возвращает, имеющий фокус, или это было самую последнюю активную дочернюю форму.
При наличии нескольких элементов управления в форме, необходимо также указать, какой элемент управления является активным. Как и ActiveMdiChild свойство, ActiveControl возвращает элемент управления с фокусом на активной дочерней формы. Следующая процедура служит примером процедуры копирования, которые могут вызываться из меню дочерней формы, из меню MDI-формы, или кнопку панели инструментов.
Для определения активной дочерней MDI-формы (чтобы скопировать его текст в буфер обмена)
В методе скопируйте текст активного элемента управления активной дочерней формы в буфер обмена.
Note
В этом примере предполагается, имеется родительская форма MDI (
Form1
), имеет один или несколько дочерних MDI-окон содержащий RichTextBox элемента управления. Дополнительные сведения см. в разделе Создание родительских 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."); } } }