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