O introducere în programarea unui control VB.NET cu moștenire

Construirea de componente personalizate complete poate fi un proiect foarte avansat. Dar puteți construi o clasă VB.NET care are multe dintre avantajele unei componente a cutiei de instrumente cu mult mai puțin efort. Iată cum!

Pentru a obține o aromă a ceea ce trebuie să faceți pentru a crea o componentă personalizată completă, încercați acest experiment:

-> Deschideți un nou proiect de aplicație Windows în VB.NET.
-> Adăugați un CheckBox din caseta de instrumente la formular.
-> Faceți clic pe butonul „Afișați toate fișierele” din partea de sus a Exploratorului de soluții.

Aceasta va afișa fișierele pe care Visual Studio le creează pentru proiectul dvs. (deci nu trebuie). Ca o notă de subsol istorică, compilatorul VB6 a făcut multe lucruri identice, dar niciodată nu ați putut accesa codul, deoarece a fost îngropat în „p-cod” compilat. Puteți dezvolta și controale personalizate în VB6, dar a fost mult mai dificil și a necesitat o utilitate specială pe care Microsoft a furnizat-o doar în acest scop.

În formular Designer.vb fișier, veți găsi că codul de mai jos a fost adăugat automat în locațiile potrivite pentru a sprijini componenta CheckBox. (Dacă aveți o versiune diferită de Visual Studio, codul dvs. poate fi ușor diferit.) Acesta este codul pe care Visual Studio îl scrie pentru dvs..

'Necesită de componentele Windows Form Designer Private _ As System.ComponentModel.IContainer'NOTE: Următoarea procedură este necesară' prin Windows Form Designer'Poate fi modificată folosind Windows Form Designer. 'Nu o modificați folosind editorul de coduri . _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" ... și așa mai departe ... 

Acesta este codul pe care trebuie să îl adăugați la program pentru a crea un control personalizat. Rețineți că toate metodele și proprietățile controlului CheckBox sunt într-o clasă furnizată de .NET Framework: System.Windows.Forms.CheckBox. Acesta nu face parte din proiectul dvs., deoarece este instalat în Windows pentru toate programele .NET. Dar există un mult din ea.

Un alt punct de care trebuie să știți este că dacă utilizați WPF (Windows Presentation Foundation), clasa .NET CheckBox provine dintr-o bibliotecă complet diferită numită System.Windows.Controls. Acest articol funcționează doar pentru o aplicație Windows Forms, dar principalii de moștenire lucrează aici pentru orice proiect VB.NET.

Să presupunem că proiectul dvs. are nevoie de un control care seamănă foarte mult cu unul dintre controalele standard. De exemplu, o casetă de selectare care și-a schimbat culoarea sau a afișat o minusculă „față fericită” în loc să afișeze mica grafică „verificare”. Vom construi o clasă care face acest lucru și vă va arăta cum să o adăugați la proiectul dvs. În timp ce acest lucru poate fi util de la sine, scopul real este să demonstreze VB.NET moştenire.

Să începem codificarea

Pentru a începe, schimbați numele CheckBox pe care tocmai l-ați adăugat oldCheckBox. (S-ar putea să doriți să nu mai afișați „Afișați toate fișierele” din nou pentru a simplifica Exploratorul de soluții.) Acum adăugați o nouă clasă la proiectul dvs. Există mai multe modalități de a face acest lucru, inclusiv să faceți clic dreapta pe proiect în Exploratorul de soluții și să selectați „Adăugați”, apoi „Clasă” sau selectați „Adăugați clasă” sub elementul de meniu Proiect. Schimbați numele fișierului din noua clasă la newCheckBox să ții lucrurile drepte. În cele din urmă, deschideți fereastra de cod pentru clasă și adăugați acest cod:

Clasa publică newCheckBox Moșteniri CheckBox Private CenterSquareColor As Color = Color.Red Anulează Protecții 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 Class SubEnd

(În acest articol și în altele de pe site, o mulțime de continuări de linie sunt utilizate pentru a menține liniile scurte, astfel încât să se încadreze în spațiul disponibil pe pagina web.)

Primul lucru de remarcat despre noul dvs. cod de clasă este Moștenește cuvinte cheie. Aceasta înseamnă că toate proprietățile și metodele unui VB.NET Framework CheckBox fac parte automat din aceasta. Pentru a aprecia cât de multă muncă economisește acest lucru, trebuie să fi încercat de la zero să programezi ceva ca o componentă CheckBox.

Există două aspecte cheie în codul de mai sus:

Primul este utilizarea codurilor Trece peste pentru a înlocui comportamentul .NET standard care ar avea loc pentru un OnPaint eveniment. Un eveniment OnPaint este declanșat de fiecare dată când Windows observă că o parte a afișajului dvs. trebuie reconstruită. Un exemplu ar fi atunci când o altă fereastră descoperă o parte din afișaj. Windows actualizează automat ecranul, dar apoi apelează la evenimentul OnPaint din codul dvs. (Evenimentul OnPaint se numește și atunci când formularul este inițial creat.) Deci, dacă anulăm OnPaint, putem schimba modul în care lucrurile arată pe ecran..

Al doilea este modul în care Visual Basic creează CheckBox. Ori de câte ori părintele este „verificat” (adică, Me.Checked este Adevărat) apoi noul cod pe care îl furnizăm în clasa noastră NewCheckBox va memora centrul CheckBox-ului în loc să deseneze o bifă.