Compartir a través de


Procedimiento para determinar el formulario secundario MDI activo

En algunas ocasiones, querrá proporcionar un comando que funcione en el control que se centra en el formulario secundario actualmente activo. Por ejemplo, supongamos que quiere copiar el texto seleccionado del cuadro de texto del formulario secundario en el Portapapeles. Crearía un procedimiento que copia el texto seleccionado en el Portapapeles mediante el evento Click del elemento de menú Copiar del menú Edición estándar.

Dado que una aplicación MDI puede tener muchas instancias del mismo formulario secundario, el procedimiento debe saber qué formulario usar. Para especificar el formulario correcto, use la propiedad ActiveMdiChild, que devuelve el formulario secundario que tiene el foco o el que ha sido más activo recientemente.

Cuando tenga varios controles en un formulario, también debe especificar qué control está activo. Al igual que la propiedad ActiveMdiChild, la propiedad ActiveControl devuelve el control con el foco en el formulario secundario activo. En el procedimiento siguiente se muestra un procedimiento de copia al que se puede llamar desde un menú de formulario secundario, un menú en el formulario MDI o un botón de la barra de herramientas.

Determinación del elemento secundario MDI activo (para copiar su texto en el Portapapeles)

  1. Dentro de un método, copie el texto del control activo del formulario secundario activo al Portapapeles.

    Nota:

    En este ejemplo se supone que hay un formulario principal MDI (Form1) que tiene una o varias ventanas secundarias MDI que incluyen un control RichTextBox. Para obtener más información, vea Creación de formularios principales 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 también