Практическое руководство. Определение активной дочерней 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."); } } }
См. также
.NET Desktop feedback
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по