Поделиться через


Практическое руководство. Определение активной дочерней 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

Другие ресурсы

Приложения с интерфейсом MDI