Programiranje klase za izradu prilagođene VB.NET kontrole

Izgradnja cjelovitih prilagođenih komponenti može biti vrlo napredan projekt. Ali možete izgraditi VB.NET klasu koja ima mnoge prednosti komponente alata s mnogo manje napora. Evo kako!

Pokušajte ovaj eksperiment da biste dobili uvid u ono što trebate napraviti kako biste stvorili cjelovitu prilagođenu komponentu:

-> Otvorite novi projekt Windows aplikacije u VB.NET-u.
-> U obrazac dodajte CheckBox iz okvira s alatima.
-> Kliknite gumb "Prikaži sve datoteke" na vrhu stranice Rješitelj preglednika.

Prikazaće se datoteke koje Visual Studio stvara za vaš projekt (tako da ne morate). Kao povijesna fusnota, sastavljač VB6 učinio je mnogo istih stvari, ali nikad niste mogli pristupiti kodu jer je bio sahranjen u sastavljenom "p-kodu". Mogli biste razviti i prilagođene kontrole i u VB6, ali bilo je puno teže i zahtijevao je poseban uslužni program koji je Microsoft isporučio upravo u tu svrhu.

U obliku Designer.vb datoteke, vidjet ćete da je kôd dolje automatski dodan na pravim mjestima za podršku komponente CheckBox. (Ako imate drugu verziju Visual Studio-a, vaš kôd može biti malo drugačiji.) Ovo je kôd koji Visual Studio piše za vas.

instagram viewer

'Zahtijeva Windows dizajner oblika privatnih komponenti _ kao sustava. ComponentModel. IContainer'NAPOMENA: Sljedeći postupak je potreban'Obaznačitelj Windows oblika'Može se izmijeniti pomoću programa Windows Form Designer. 'Nemojte ga mijenjati pomoću uređivača koda. _Private Sub InitializeComponent () Ja. CheckBox1 = Novi sustav. Windows. Obrasci. CheckBox () Ja. SuspendLayout () "" CheckBox1 "Me. CheckBox1.AutoSize = Istina ja. CheckBox1.Location = Novi sustav. Crtanje. Točka (29, 28) Ja. CheckBox1.Name = "CheckBox1".. . i tako dalje ...

Ovo je kôd koji morate dodati svom programu da biste stvorili prilagođenu kontrolu. Imajte na umu da su sve metode i svojstva stvarnih CheckBox kontrola u klasi koju nudi .NET Framework: Sustav. Windows. Obrasci. potvrdni okvir. Ovo nije dio vašeg projekta jer je instaliran u Windowsu za sve .NET programe. Ali postoji jedan mnogo od toga.

Još jedna stvar na koju morate biti svjesni je da ako koristite WPF (Windows Presentation Foundation), .NET CheckBox klasa dolazi iz potpuno druge biblioteke s imenom Sustav. Windows. kontrole. Ovaj članak funkcionira samo za aplikaciju Windows Forms, ali principi nasljeđivanja ovdje rade za bilo koji VB.NET projekt.

Pretpostavimo da vaš projekt treba kontrolu koja je vrlo slična jednoj od standardnih kontrola. Na primjer, potvrdni okvir koji je promijenio boju ili prikazao sićušno „sretno lice“, umjesto da prikazuje malu „ček“ grafiku. Izgradit ćemo klasu koja to radi i pokazati vam kako je dodati u svoj projekt. Iako bi ovo moglo biti korisno, stvarni cilj je pokazati VB.NET-ove baština.

Počnimo kodiranje

Za početak promijenite ime CheckBox-a kojem ste upravo dodali oldCheckBox. (Možda želite prestati prikazivati ​​"Prikaži sve datoteke" ponovo da biste pojednostavili Explorer Explorer.) Sada dodajte novu klasu u svoj projekt. Postoji nekoliko načina za to, uključujući desnu tipku miša kliknite projekt u programu Explorer Solution i odaberite "Add", zatim "Class" ili odaberite "Add Class" ispod stavke izbornika Project. Promijenite naziv datoteke nove klase u newCheckBox da stvari budu izravne. Na kraju, otvorite prozor koda za klasu i dodajte ovaj kôd:

Javna klasa newCheckBox Nasljedstva CheckBox Private CenterSquareColor As Color = Boja. Crveno zaštićeni poništavanja Sub OnPaint (ByVal pEvent _ Kao PaintEventArgs) Dim CenterSquare _ Kao novi pravokutnik (3, 4, 10, 12) MyBase. OnPaint (pEvent) Ako ja. Provjereno Zatim pEvent. Grafika. FillRectangle (novi SolidBrush (CenterSquareColor), CenterSquare) Kraj ako završi klasa SubEnd

(U ovom članku i u ostalim na web mjestu, koristi se niz nastavka linija da bi se kratke linije kratke uklopile u prostor dostupan na web stranici.)

Prvo što ćete primijetiti kod svoje nove klase koda je nasljeđuje ključne riječi. To znači da su sva svojstva i metode VB.NET Framework CheckBox-a automatski dio ovog. Da biste shvatili koliko ovog rada štedite, morate isprobati programiranje nečega poput CheckBox komponente ispočetka.

U gornjem kôdu trebate primjetiti dvije ključne stvari:

Prvi je kod koristi nadglasati zamijeniti standardno .NET ponašanje koje bi se odvijalo za OnPaint događaj. OnPaint događaj pokreće se kad god Windows primijeti da dio vašeg zaslona treba rekonstruirati. Primjer može biti kada drugi prozor otkriva dio vašeg zaslona. Windows ažurira zaslon automatski, ali tada poziva događaj OnPaint u vašem kodu. (OnPaint događaj se također naziva kada je obrazac prvobitno kreiran.) Dakle, ako preglasimo OnPaint, možemo promijeniti način na koji stvari izgledaju na zaslonu.

Drugi je način na koji Visual Basic stvara CheckBox. Kad god se roditelj "provjerava" (tj. Mi. provjeren je Pravi) tada će novi kôd koji pružamo u našoj klasi NewCheckBox ponovno obojiti središte CheckBoxa umjesto crtanja kvačice.

Ostalo je ono što se zove GDI + kod. Ovaj kôd odabire pravokutnik točno iste veličine kao središte potvrdne kutije i boji ga u pozive metode GDI +. "Čarobni brojevi" za pozicioniranje crvenog pravokutnika, "Pravokutnik (3, 4, 10, 12)", eksperimentalno su određeni. Samo sam ga mijenjao dok nije izgledao kako treba.

Postoji jedan vrlo važan korak kojim želite biti sigurni da se neće izostaviti iz postupka Prekoračenje:

MyBase. OnPaint (pEvent)

Prekoračenje znači da će pružiti vaš kôd svi koda događaja. Ali to je rijetko ono što želite. Na taj način VB pruža način pokretanja normalnog .NET koda koji bi bio izveden za događaj. Ovo je izjava koja to čini. Prenosi isti taj parametar - pEvent - kodu događaja koji bi se izvršio da nije bio nadjačan, MyBase. OnPaint.

Upotreba nove kontrole

Budući da se naša nova kontrola ne nalazi u našem alatu, ona se mora kreirati u obliku s kodom. Najbolje mjesto za to je u obliku Opterećenje postupak događaja.

Otvorite prozor koda za postupak događaja obrasca učitavanja obrasca i dodajte ga:

Private Sub frmCustCtrlEx_Load (ByVal pošiljatelj kao sustav. Objekt, ByVal e kao sustav. EventArgs) Rukuje MyBase. Učitajte Dim customCheckBox kao novi newCheckBox () s customCheckBox .Text = "Custom CheckBox" .Left = oldCheckBox. Lijevo .Top = oldCheckBox. Top + oldCheckBox. Visina. Veličina = Nova veličina (oldCheckBox Veličina. Širina + 50, oldCheckBox. Veličina. Visina) Kraj s kontrolama. Dodajte (customCheckBox) krajnji sub

Da bismo postavili novi potvrdni okvir na obrazac, iskoristili smo činjenicu da ga već postoji i upravo smo iskoristili veličinu i položaj tog (podešen tako da svojstvo Text odgovara). U suprotnom bismo poziciju morali ručno kodirati. Kad se MyCheckBox doda u obrazac, dodamo ga u kolekciju Controls.

No, ovaj kod nije baš fleksibilan. Na primjer, crvena boja je tvrdo kodirana, a promjena boje zahtijeva promjenu programa. Možda ćete također htjeti grafiku umjesto kvačice.

Evo nove, poboljšane klase CheckBox. Ovaj kôd pokazuje kako poduzeti neke od sljedećih koraka prema VB.NET objektno orijentiranom programiranju.

Javna klasa betterCheckBox Inherits CheckBox Private CenterSquareColor As Color = Boja. Plavi privatni centarSquareImage kao bitmap privatni centarSquare kao novi pravokutnik (3, 4, 10, 12) zaštićeni preklapanja Sub OnPaint _ (ByVal pEvent As _ System. Windows. Obrasci. PaintEventArgs) MyBase. OnPaint (pEvent) Ako ja. Tada se provjerava ako CenterSquareImage nije ništa, tada pEvent. Grafika. FillRectangle (Novi SolidBrush (CenterSquareColor), CenterSquare) Ostalo pEvent. Grafika. DrawImage (CenterSquareImage, CenterSquare) Kraj Ako Kraj Ako Kraj Pod Subjekt javno svojstvo FillColor () Kao boja Nabavite FillColor = CenterSquareColor End Get Set (ByVal Value As Colour) CenterSquareColor = Vrijednost završetka svojstva Javna svojina FillImage () Kao bitmap Dobivanje FillImage = CenterSquareImage Kraj Get Set (ByVal vrijednost kao Bitmap) CenterSquareImage = Vrijednost završetka Set End End PropertyEnd klasa

Zašto je verzija BetterCheckBox bolja

Jedno od glavnih poboljšanja je dodavanje dvaju Svojstva. To je nešto što stari razred uopće nije radio.

Uvedena su dva nova svojstva

FillColor

i

FillImage

Da biste dobili ukus o tome kako to funkcionira u VB.NET-u, pokušajte s ovim jednostavnim eksperimentom. Dodajte klasu u standardni projekt, a zatim unesite kôd:

Javno vlasništvo što god dobivate

Kada pritisnete Enter nakon što upišete "Get", VB.NET Intellisense ispunjava cjelokupni blok šifri imovine i sve što trebate učiniti je kodirati specifičnosti vašeg projekta. (Blokovi Get and Set nisu uvijek potrebni počevši s VB.NET 2010, pa morate barem reći Intellisenseu ovoliko kako biste ga pokrenuli.)

Javno vlasništvo Bez obzira na kraj Get Set Set (ByVal vrijednost) End SetEnd Properties

Ti su blokovi dovršeni u gornjem kodu. Svrha ovih blokova koda je omogućavanje pristupa vrijednostima svojstava iz drugih dijelova sustava.

Dodavanjem metoda, vi ste na dobrom putu za stvaranje cjelovite komponente. Da biste vidjeli vrlo jednostavan primjer metode, dodajte ovaj kôd ispod deklaracija svojstva u razredu betterCheckBox:

Javni sub naglašava () mene. Font = Novi sustav. Crtanje. Font (_ "Microsoft Sans Serif", 12.0!, _ Sustav. Crtanje. FontStyle. Hrabro) Ja. Veličina = Novi sustav. Crtanje. Veličina (200, 35) Središnji kvadrat. Pomak (Središnji kvadrat). Lijevo - 3, centarSkvadrata. Vrh + 3) Kraj sub

Osim prilagođavanja Fontova prikazanog u CheckBox-u, ova metoda prilagođava i veličinu okvira i mjesto označenog pravokutnika kako bi se dobila nova veličina. Da biste koristili novu metodu, samo je kodirajte na isti način kao i bilo koja metoda:

MyBetterEmphasizedBox. Naglasiti()

I baš poput Svojstva, Visual Studio automatski dodaje novu metodu u Microsoftov Intellisense!

Glavni je cilj ovdje jednostavno pokazati kako se metoda kodira. Možda ste svjesni da standardna kontrola CheckBox-a također omogućuje promjenu Fontova, tako da ova metoda ne dodaje puno funkcije.

Sljedeći članak u ovom nizu, Programiranje prilagođene VB.NET kontrole - izvan osnova!, pokazuje metodu koja to čini, a također objašnjava kako nadjačati metodu u prilagođenoj kontroli.

instagram story viewer