Практическое руководство. Определение активной дочерней MDI-формы

В некоторых случаях необходимо предоставить команду, которая работает с элементом управления, в фокусе которого находится активная дочерняя форма. Например, предположим, что вы хотите скопировать выделенный текст из текстового поля дочерней формы в буфер обмена. Для этого необходимо создать процедуру, которая копирует выделенный текст в буфер обмена с помощью события Click пункта меню «Копировать» в стандартном меню «Изменить».

Так как приложение MDI может иметь множество экземпляров одной дочерней формы, процедура должна знать, какую из форм следует использовать. Чтобы указать правильную форму, используйте свойство ActiveMdiChild, которое возвращает дочернюю форму с фокусом или бывшую активной позднее всего.

При наличии нескольких элементов управления в форме также необходимо указать, какой из них активен. Как и свойство ActiveMdiChild, свойство ActiveControl возвращает элемент управления с фокусом на активной дочерней форме. В приведенной ниже процедуре показана процедура копирования, которую можно вызвать из меню дочерней формы, меню из формы MDI или через кнопку панели инструментов.

Определение активного дочернего элемента MDI (для копирования текста в буфер обмена)

  1. В пределах метода скопируйте текст из буфера обмена в активный элемент управления активной дочерней формы.

    Примечание.

    В этом примере предполагается, что имеется родительская форма 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.");  
          }  
       }  
    }  
    

См. также