Condividi tramite


Procedura: determinare il figlio MDI attivo

Aggiornamento: novembre 2007

Occasionalmente può essere utile fornire un comando che agisca sul controllo con lo stato attivo sul form figlio attualmente attivo. Se si desidera, ad esempio, copiare il testo selezionato dalla casella di testo del form figlio negli Appunti, creare una routine che copi il testo selezionato negli Appunti mediante l'evento Click della voce Copia del menu standard Modifica.

Poiché un'applicazione MDI può avere molte istanze dello stesso form figlio, è necessario specificare quale form deve essere utilizzato dalla routine. Per specificare il form corretto, utilizzare la proprietà ActiveMdiChild che restituisce il form figlio con lo stato attivo o quello che è stato attivato più recentemente.

Quando su un form sono disponibili diversi controlli è necessario specificare anche quale sia il controllo attivo. Analogamente alla proprietà ActiveMdiChild, la proprietà ActiveControl restituisce il controllo con lo stato attivo sul form figlio attivo. Di seguito è illustrata una routine di copia che può essere chiamata dal menu di un form figlio, da un menu sul form MDI o da un pulsante della barra degli strumenti.

Per determinare il figlio MDI attivo e copiarne il testo negli Appunti

  • In un metodo, copiare negli Appunti il testo del controllo attivo del form figlio attivo.

    Nota:

    Nell'esempio qui di seguito si presume l'esistenza di un form padre MDI (Form1) con una o più finestre figlio MDI contenenti un controllo RichTextBox. Per ulteriori informazioni, vedere Creazione di form 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
          Try
             Dim theBox As RichTextBox = _
             Ctype(activeChild.ActiveControl, RichTextBox)
             If (Not theBox Is Nothing) Then
                ' Put selected text on Clipboard.
                Clipboard.SetDataObject(theBox.SelectedText)
             End If
          Catch
             MessageBox.Show("You need to select a RichTextBox.")
          End Try
       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.");
          }
       }
    }
    

Vedere anche

Attività

Procedura: creare form padre MDI

Procedura: creare form figlio MDI

Procedura: inviare dati al figlio MDI attivo

Procedura: disporre i form figlio MDI

Altre risorse

Applicazioni MDI (Interfaccia a documenti multipli, Multiple-Document Interface)