Sviluppo di controlli personalizzati

Aggiornamento: novembre 2007

In .NET Compact Framework vengono forniti tutti i controlli Windows Form necessari per soddisfare le esigenze di programmazione della maggior parte dei progetti per dispositivi. Poiché i controlli sono progettati per un uso efficiente delle risorse limitate dei dispositivi, non è disponibile il supporto per tutti i metodi, le proprietà e gli eventi ereditati. Per sopperire alle funzionalità mancanti, è possibile derivare i controlli personalizzati dai controlli comuni. È possibile creare un controllo personalizzato definendo un tipo pubblico che eredita dalla classe Control o da un oggetto UserControl esistente nell'assembly.

Il metodo più semplice per la personalizzazione dei controlli consiste nell'eseguire l'override dei metodi dei controlli comuni. Per fornire ad esempio il codice necessario per limitare l'input ai soli caratteri numerici, è possibile eseguire l'override del metodo ereditato OnKeyPress di un controllo TextBox.

Nota:

In .NET Compact Framework non sono supportati tutti i metodi, le proprietà e gli eventi dei controlli Windows Form ereditati dai controlli di base.

È possibile derivare dai controlli comuni per:

  • Eseguire l'override di proprietà, metodi ed eventi personalizzati dei controlli comuni.

  • Definire proprietà, metodi ed eventi aggiuntivi per un controllo.

  • Generare un controllo composito, come un insieme di controlli TextBox e Button.

  • Definire la risposta di un controllo alle azioni degli utenti, ad esempio specificando che un controllo TextBox può accettare solo dati numerici.

In .NET Compact Framework non è possibile aggiungere controlli personalizzati per l'accesso in fase di progettazione.

Per una personalizzazione più dettagliata, è necessario creare un controllo personalizzato derivato dalla classe Control. È possibile creare il controllo eseguendo l'override del metodo OnPaint e creare controlli non appartenenti all'interfaccia utente per soddisfare altre esigenze, come la definizione di un evento personalizzato.

La classe base Control non contiene le informazioni necessarie per il disegno dei controlli derivati e il relativo metodo OnPaint non fornisce alcuna logica di disegno. Il metodo OnPaint della classe Control non fa che inviare l'evento Paint ai riceventi di eventi registrati.

.NET Compact Framework genera gli eventi Paint e Resize solo per le classi Form e Control.

Aggiunta di controlli personalizzati alla Casella degli strumenti

Quando si crea un progetto per un controllo personalizzato in Microsoft Visual Studio 2005, il controllo viene automaticamente aggiunto alla Casella degli strumenti quando l'applicazione viene compilata. È possibile creare un controllo personalizzato mediante uno dei seguenti tipi di progetto:

  • Libreria di controlli

  • Libreria di classi

  • Libreria di classi (1.0)

Per aggiungere un controllo personalizzato alla casella degli strumenti, scegliere Scegli elementi della Casella degli strumenti dal menu Strumenti. Sarà quindi possibile cercare l'assembly del controllo.

Tecniche di creazione e considerazioni sui controlli personalizzati

Tenere presenti i seguenti punti quando si creano controlli personalizzati:

  • In .NET Compact Framework non è supportata l'eredità di valori da un controllo padre, come avviene con alcuni controlli nella versione completa di NET Framework. Per risolvere questo problema, è possibile utilizzare il metodo OnParentChanged per determinare quando il controllo padre viene modificato e intraprendere l'azione appropriata. Nell'esempio di codice riportato di seguito viene illustrata la modifica del colore di sfondo quando viene modificato il controllo padre:

    protected override void OnParentChanged(EventArgs e)
    {
        base.OnParentChanged(e);
        this.BackColor = Parent.BackColor;
    }
    
    Protected Overrides Sub OnParentChanged(ByVal e As EventArgs) 
        MyBase.OnParentChanged(e)
        Me.BackColor = Parent.BackColor
    End Sub
    
  • In .NET Compact Framework non è supportata l'eredità del carattere di un controllo principale.

  • Per individuare la posizione di un controllo personalizzato in cui si è verificato un evento "tocco premuto" per visualizzare un menu di scelta rapida, gestire l'evento Popup, quindi eseguire una query delle coordinate correnti del mouse tramite la proprietà MousePosition.

  • Per passare dal controllo personalizzato al controllo precedente, utilizzare il codice riportato di seguito nel gestore eventi KeyDown quando viene rilevata una chiave Up.

    this.Parent.Controls(
        this.Parent.GetChildIndex(customcontrol) - 1).Focus()
    
    Me.Parent.Controls( _
        Me.Parent.GetChildIndex(customcontrol) - 1).Focus
    

Argomenti delle procedure

Nei seguenti argomenti delle procedure viene illustrato come utilizzare i controlli personalizzati per ottenere la funzionalità estesa:

Procedura: creare un evento di doppio clic personalizzato

Procedura: creare un controllo pulsante con immagine personalizzato

Procedura: visualizzare un riempimento sfumato

Procedura: creare una casella di testo numerica

Procedura: creare una casella di riepilogo creata dal proprietario

Procedura: creare funzionalità OnEnter

Procedura: scorrere il contenuto del form

Procedura: ordinare gli elementi degli oggetti ListView

Procedura: creare una sottoclasse di TreeView tramite callback nativi

Procedura: creare una sottoclasse di Button tramite callback nativi

Vedere anche

Concetti

Creazione di sottoclassi per i controlli tramite una routine di finestra gestita

Altre risorse

Controlli Windows Form in .NET Compact Framework