Partilhar via


Como determinar o filho MDI ativo

Ocasionalmente, você desejará fornecer um comando que opere no controle que tem foco no formulário filho atualmente ativo. Por exemplo, suponha que pretendas copiar o texto selecionado da caixa de texto do formulário filho para a Prancheta. Você criaria um procedimento que copiasse o texto selecionado para a Área de Transferência usando o evento Click do item de menu Copiar no menu Editar padrão.

Como uma aplicação MDI pode ter muitas instâncias do mesmo formulário filho, o procedimento deve identificar qual formulário usar. Para especificar o formulário correto, use a propriedade ActiveMdiChild, que retorna o formulário filho que está em foco ou que esteve mais recentemente ativo.

Quando você tem vários controles em um formulário, você também precisa especificar qual controle está ativo. Como a propriedade ActiveMdiChild, a propriedade ActiveControl retorna o controle com o foco no formulário filho ativo. O procedimento abaixo ilustra um processo de cópia que pode ser acionado a partir de um menu de formulário filho, de um menu no formulário MDI, ou 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. Dentro de um método, copie o texto do controlo ativo do formulário filho ativo para o portapapéis.

    Observação

    Este exemplo pressupõe que haja um formulário pai MDI (Form1) que tenha uma ou mais janelas filho 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.");  
          }  
       }  
    }  
    

Ver também