Condividi tramite


Procedura: determinare il figlio MDI attivo

In alcuni casi, si vuole fornire un comando che opera sul controllo che ha lo stato attivo sul form figlio attualmente attivo. Si supponga, ad esempio, di voler copiare il testo selezionato dalla casella di testo del modulo figlio negli Appunti. Creare una routine che copia il testo selezionato negli Appunti usando l'evento Click della voce di menu Copia dal menu Modifica standard.

Poiché un'applicazione MDI può avere molte istanze dello stesso modulo figlio, la routine deve conoscere quale modulo usare. Per specificare il modulo corretto, utilizzare la ActiveMdiChild proprietà , che restituisce il modulo figlio con lo stato attivo o che è stato attivo più di recente.

Quando sono presenti diversi controlli in una maschera, è necessario specificare anche quale controllo è attivo. Analogamente alla ActiveMdiChild proprietà, la ActiveControl proprietà restituisce il controllo con lo stato attivo sul form figlio attivo. La procedura seguente illustra una procedura di copia che può essere chiamata da un menu di modulo figlio, un menu nel modulo MDI o un pulsante della barra degli strumenti.

Per determinare il figlio MDI attivo (per copiarne il testo negli Appunti)

  1. All'interno di un metodo copiare il testo del controllo attivo del form figlio attivo negli Appunti.

    Nota

    In questo esempio si presuppone che sia presente un form padre MDI (Form1) con una o più finestre figlio MDI contenenti un RichTextBox controllo . Per altre informazioni, vedere Creazione di moduli padre 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.");  
          }  
       }  
    }  
    

Vedi anche