Un'introduzione alla programmazione di un controllo VB.NET con ereditarietà

La creazione di componenti personalizzati completi può essere un progetto molto avanzato. Ma puoi creare una classe VB.NET che presenta molti dei vantaggi di un componente toolbox con molto meno sforzo. Ecco come!

Per avere un'idea di ciò che devi fare per creare un componente personalizzato completo, prova questo esperimento:

-> Apri un nuovo progetto Applicazione Windows in VB.NET.
-> Aggiungi un CheckBox dalla casella degli strumenti al modulo.
-> Fai clic sul pulsante "Mostra tutti i file" nella parte superiore di Esplora soluzioni.

Verranno visualizzati i file creati da Visual Studio per il tuo progetto (quindi non è necessario). Come nota a piè di pagina storica, il compilatore VB6 ha fatto molte delle stesse cose, ma non è mai stato possibile accedere al codice perché è stato sepolto nel "codice p" compilato. Potresti sviluppare controlli personalizzati anche in VB6, ma era molto più difficile e richiedeva un'utilità speciale che Microsoft ha fornito proprio a tale scopo.

Nella forma Designer.vb file, troverai che il codice seguente è stato aggiunto automaticamente nelle posizioni giuste per supportare il componente CheckBox. (Se hai una versione diversa di Visual Studio, il tuo codice potrebbe essere leggermente diverso.) Questo è il codice che Visual Studio scrive per te.

"Richiesto dai componenti privati ​​di Progettazione Windows Form _ Come System.ComponentModel.IContainer" NOTA: la seguente procedura è richiesta "da Progettazione Windows Form" Può essere modificata utilizzando Progettazione Windows Form. "Non modificarlo utilizzando l'editor di codice . _Private Sub InitializeComponent () Me.CheckBox1 = New System.Windows.Forms.CheckBox () Me.SuspendLayout () "CheckBox1 'Me.CheckBox1.AutoSize = True Me.CheckBox1.Location = New System.Drawing.Point (29, 28 ) Me.CheckBox1.Name = "CheckBox1" ... e così via ... 

Questo è il codice che devi aggiungere al tuo programma per creare un controllo personalizzato. Tenere presente che tutti i metodi e le proprietà del controllo CheckBox effettivo sono in una classe fornita da .NET Framework: System.Windows.Forms.CheckBox. Questo non fa parte del tuo progetto perché è installato in Windows per tutti i programmi .NET. Ma c'è un lotto di esso.

Un altro punto da tenere presente è che se si utilizza WPF (Windows Presentation Foundation), la classe CheckBox .NET proviene da una libreria completamente diversa denominata System.Windows.Controls. Questo articolo funziona solo per un'applicazione Windows Form, ma i principi di ereditarietà qui funzionano per qualsiasi progetto VB.NET.

Supponiamo che il tuo progetto abbia bisogno di un controllo molto simile a uno dei controlli standard. Ad esempio, una casella di controllo che ha cambiato colore o visualizzato una piccola "faccia felice" invece di visualizzare la piccola grafica "check". Costruiremo una classe che lo farà e ti mostrerà come aggiungerlo al tuo progetto. Mentre questo potrebbe essere utile da solo, il vero obiettivo è dimostrare VB.NET eredità.

Cominciamo a programmare

Per iniziare, cambia il nome del CheckBox che hai appena aggiunto oldCheckBox. (Potresti voler smettere di visualizzare nuovamente "Mostra tutti i file" per semplificare Esplora soluzioni.) Ora aggiungi una nuova classe al tuo progetto. Esistono diversi modi per farlo, incluso il clic con il tasto destro del mouse su Esplora soluzioni e selezionando "Aggiungi", quindi "Classe" o selezionando "Aggiungi classe" nella voce di menu Progetto. Cambia il nome del file della nuova classe in newCheckBox per mantenere le cose dritte. Infine, apri la finestra del codice per la classe e aggiungi questo codice:

Classe pubblica newCheckBox Eredita CheckBox Private CenterSquareColor As Color = Color.Red Protected Sostituisce Sub OnPaint (ByVal pEvent _ As PaintEventArgs) Dim CenterSquare _ As New Rectangle (3, 4, 10, 12) MyBase.OnPaint (pEvent) If Me.Checked pEvent.Graphics.FillRectangle (New SolidBrush (CenterSquareColor), CenterSquare) End If End SubEnd Class

(In questo articolo e in altri sul sito, vengono utilizzate molte continuazioni di linea per mantenere le linee corte in modo che si adattino allo spazio disponibile sulla pagina Web.)

La prima cosa da notare sul tuo nuovo codice di classe è il eredita parola chiave. Ciò significa che tutte le proprietà e i metodi di un CheckBox Framework VB.NET fanno automaticamente parte di questo. Per apprezzare quanto lavoro risparmi, devi aver provato a programmare qualcosa come un componente CheckBox da zero.

Ci sono due cose chiave da notare nel codice sopra:

Il primo è il codice utilizzato Oltrepassare per sostituire il comportamento .NET standard che si sarebbe verificato per un OnPaint evento. Un evento OnPaint viene attivato ogni volta che Windows nota che è necessario ricostruire una parte del display. Un esempio potrebbe essere quando un'altra finestra scopre parte del display. Windows aggiorna automaticamente il display, ma chiama quindi l'evento OnPaint nel codice. (L'evento OnPaint viene chiamato anche quando il modulo viene inizialmente creato.) Quindi, se Override OnPaint, possiamo cambiare il modo in cui le cose appaiono sullo schermo.

Il secondo è il modo in cui Visual Basic crea CheckBox. Ogni volta che il genitore è "Controllato" (ovvero, Me.Checked è Vero) quindi il nuovo codice che forniamo nella nostra classe NewCheckBox ricolorerà il centro del CheckBox invece di tracciare un segno di spunta.