Compartilhar via


Como determinar o filho MDI ativo

Em certas ocasiões, você quererá dar um comando que opere no controle que está com foco no formulário filho atualmente ativo. Por exemplo, suponha que você queira copiar o texto selecionado da caixa de texto do formulário filho para a Prancheta. Você criaria um procedimento que copia o texto selecionado para a Área de Transferência usando o evento Click do item de menu "Copiar" no menu "Editar" padrão.

Como um aplicativo MDI pode ter muitas instâncias do mesmo formulário filho, o procedimento precisa saber qual formulário usar. Para especificar o formulário correto, use a propriedade ActiveMdiChild, que retorna o formulário filho que tem o foco ou que esteve ativo recentemente.

Quando você tem vários controles em um formulário, também precisa especificar qual controle está ativo. Assim como a propriedade ActiveMdiChild, a propriedade ActiveControl retorna o controle com o foco no formulário filho ativo. O procedimento abaixo ilustra um procedimento de cópia que pode ser chamado de um menu de formulário filho, no menu do formulário MDI ou através de um botão na barra de ferramentas.

Para determinar o filho MDI ativo (para copiar seu texto para a área de transferência)

  1. No método, copie o texto do controle ativo do formulário filho ativo para a área de transferência.

    Nota

    Este exemplo pressupõe que haja um formulário pai MDI (Form1) que tenha uma ou mais janelas filhas MDI contendo um controle RichTextBox. Para obter mais informações, consulte Criando formulários pai 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.");  
          }  
       }  
    }  
    

Consulte também