Izdelava popolnih komponent po meri je lahko zelo napreden projekt. Lahko pa zgradite razred VB.NET, ki ima številne prednosti komponente orodja s precej manj truda. Takole!
Če želite pridobiti okus, kaj morate storiti, da ustvarite popolno komponento po meri, poskusite s tem preizkusom:
-> Odprite nov aplikacijski projekt Windows v VB.NET.
-> V obrazec dodajte CheckBox iz Orodja.
-> Kliknite gumb "Prikaži vse datoteke" na vrhu Raziskovalec rešitev.
Prikažejo se datoteke, ki jih Visual Studio ustvari za vaš projekt (zato vam ni treba). Kot zgodovinska opomba je prevajalnik VB6 naredil veliko istih stvari, vendar do kode nikoli niste mogli dostopati, ker je bila pokopana v sestavljeni "p-kodi". Tudi v VB6 bi lahko razvili nadzor po meri, vendar je bilo veliko težje in je bil potreben poseben pripomoček, ki ga je Microsoft dobavil ravno v ta namen.
V obliki Oblikovalec.vb Datoteka, boste ugotovili, da je spodnja koda samodejno dodana na pravih mestih za podporo komponente CheckBox. (Če imate drugo različico Visual Studio-a, je lahko koda nekoliko drugačna.) To je koda, ki jo Visual Studio piše za vas.
„Zahteva zasebni sestavni del _ kot sistem Windows oblikovalec obrazcev. ComponentModel IContainer'NOTE: Za oblikovalnik obrazcev za Windows je potreben naslednji postopek 'Lahko ga spremenite s pomočjo oblikovalca obrazcev Windows.' Ne spreminjajte ga z urejevalnikom kod._Private Sub InitializeComponent () Me. CheckBox1 = Nov sistem. Windows. Obrazci. CheckBox () Jaz. SuspendLayout () "CheckBox1" Me. CheckBox1.AutoSize = True Me. CheckBox1.Location = Nov sistem. Risba. Točka (29, 28) Jaz. CheckBox1.Name = "CheckBox1".. . in tako naprej ...
To je koda, ki jo morate dodati svojemu programu, da ustvarite nadzor po meri. Upoštevajte, da so vse metode in lastnosti dejanskega kontrolnika CheckBox v razredu, ki ga ponuja .NET Framework: Sistem. Windows. Obrazci. CheckBox. To ni del vašega projekta, ker je nameščen v sistemu Windows za vse .NET programe. Toda obstaja a veliko od tega.
Pomembno je vedeti tudi to, če uporabljate WPF (Windows Presentation Foundation), .NET CheckBox razred izvira iz popolnoma druge knjižnice z imenom Sistem. Windows. Kontrole. Ta članek deluje samo za aplikacijo Windows Forms, vendar načela dedovanja tukaj delujejo pri katerem koli projektu VB.NET.
Recimo, da vaš projekt potrebuje nadzor, ki je zelo podoben enemu od standardnih kontrol. Na primer potrditveno polje, ki je spremenilo barvo ali prikazovalo droben "srečen obraz", namesto da bi prikazovalo malo "check" grafike. Zgradili bomo razred, ki to počne, in vam pokazali, kako ga dodati v svoj projekt. Čeprav je to lahko koristno samo po sebi, je pravi cilj prikazati VB.NET-ove dedovanje.
Začnimo s kodiranjem
Če želite začeti, spremenite ime CheckBoxa, ki ste ga pravkar dodali oldCheckBox. (Morda boste želeli znova prenehati prikazovati "Prikaži vse datoteke", da bi poenostavili raziskovalec rešitev.) Sedaj dodajte nov razred v svoj projekt. To lahko storite na več načinov, vključno z desnim klikom na projekt v Raziskovalcu rešitev in z izbiro "Dodaj", nato "Razred" ali pod možnostjo menija Projekt izberite "Dodaj razred". Spremenite ime datoteke novega razreda v novCheckBox da stvari ostanejo naravnost. Končno odprite okno s kodo za razred in dodajte to kodo:
Novorazredne dediščine CheckBox CheckBox Zasebni centerSquareColor As Colour = Color. Rdeča zaščitena prekrivanja Sub OnPaint (ByVal pEvent _ Kot PaintEventArgs) Dim CenterSquare _ Kot nov pravokotnik (3, 4, 10, 12) MyBase. OnPaint (pEvent) Če jaz. Potrjeno nato pEvent. Grafika. FillRectangle (nov SolidBrush (CenterSquareColor), CenterSquare) Konec, če konča razred SubEnd
(V tem članku in drugih na spletnem mestu se uporablja veliko nadaljevanj vrstic, da se črte kratke, tako da se prilegajo prostoru, ki je na voljo na spletni strani.)
Prva stvar, ki jo opazite pri novi kodi razreda, je Dediščine ključna beseda. To pomeni, da so vse lastnosti in metode VB.NET Framework CheckBox samodejno del tega. Če želite ceniti, koliko dela prihranite, morate poskusiti programirati nekaj, kot je CheckBox komponenta, iz nič.
V zgornji kodi je treba opaziti dve ključni stvari:
Prva je uporaba kode Preglasiti nadomestiti standardno vedenje .NET, ki bi potekalo za OnPaint dogodek. Dogodek OnPaint se sproži, kadar Windows opazi, da je treba rekonstruirati del zaslona. Primer bi bil, ko drugo okno odkrije del vašega zaslona. Windows samodejno posodobi zaslon, a nato pokliče dogodek OnPaint v kodo. (Dogodek OnPaint se imenuje tudi, ko je obrazec prvotno ustvarjen.) Torej, če preglasimo OnPaint, lahko spremenimo način, kako stvari izgledajo na zaslonu.
Drugi način je, kako Visual Basic ustvari CheckBox. Kadarkoli je starš "Preverjen" (tj. Jaz. Preverjeno je Prav) potem bo nova koda, ki jo ponujamo v našem razredu NewCheckBox, pobarvala sredino CheckBoxa, namesto da bi risala kljukico.
Ostalo je tisto, kar se imenuje GDI + koda. Ta koda izbere pravokotnik točno iste velikosti kot središče potrditvenega polja in ga obarva s klici metode GDI +. "Čarobne številke" za postavitev rdečega pravokotnika, "Pravokotnik (3, 4, 10, 12)", so bile določene eksperimentalno. Samo zamenjal sem ga, dokler ni bilo videti prav.
Obstaja en zelo pomemben korak, s katerim se želite prepričati, da se ne izognete postopkom Override:
MyBase. OnPaint (pEvent)
Preveri pomeni, da bo vaša koda vse kode za dogodek. Toda to je redko, kar želite. Torej VB ponuja način zagon običajne kode .NET, ki bi bila izvedena za dogodek. To je izjava, ki to naredi. Enak isti parameter - pEvent - prenaša na kodo dogodka, ki bi bila izvedena, če je ne bi preglasili, MyBase. OnPaint.
Uporaba novega nadzora
Ker našega novega krmilnika ni v našem orodnem polju, ga je treba izdelati v obliki s kodo. Najboljši kraj za to je v obliki Obremenite postopek dogodka.
Odprite okno s kodo za postopek dogodka nalaganja obrazca in dodajte to kodo:
Zasebni Sub frmCustCtrlEx_Load (ByVal pošiljatelj kot sistem. Objekt, ByVal e As System. EventArgs) Rokuje MyBase. Naložite Dim customCheckBox kot nov newCheckBox () s customCheckBox .Text = "Custom CheckBox" .Left = oldCheckBox. Levo .Top = oldCheckBox. Na vrh + stariCheckBox. Višina. Velikost = Nova velikost (oldCheckBox Velikost. Širina + 50, oldCheckBox. Velikost. Višina) Konec s krmilnimi elementi. Dodaj (customCheckBox) Končni pod
Da bi novo potrditveno polje postavili na obrazec, smo izkoristili dejstvo, da ga že obstaja, in ravnokar smo uporabili velikost in položaj tega (prilagojeno tako, da se bo lastnost Text ujemala). V nasprotnem primeru bi morali položaj kodirati ročno. Ko je MyCheckBox dodan v obrazec, ga nato dodamo v zbirko Controls.
Toda ta koda ni zelo prilagodljiva. Na primer, rdeča barva je trdo kodirana in sprememba barve zahteva spremembo programa. Morda boste želeli tudi grafiko namesto kljukice.
Tu je nov, izboljšani razred CheckBox. Ta koda prikazuje, kako narediti nekaj naslednjih korakov do objektno usmerjenega programiranja VB.NET.
Javni razred betterCheckBox Inherits CheckBox Private CenterSquareColor As Color = Barva. Modri zasebni centerSquareImage kot bitmap zasebni centerSquare kot nov pravokotnik (3, 4, 10, 12) Zaščiteno preglasovanje Sub OnPaint _ (ByVal pEvent As _ System. Windows. Obrazci. PaintEventArgs) MyBase. OnPaint (pEvent) Če jaz. Potrjeno potem, če CenterSquareImage ni nič, potem pEvent. Grafika. FillRectangle (New SolidBrush (CenterSquareColor), CenterSquare) še pEvent. Grafika. DrawImage (CenterSquareImage, CenterSquare) konec, če se konča, če konča Sub Sub Public Property FillColor () kot barva Get FillColor = CenterSquareColor End Get Set (ByVal Value As Color) CenterSquareColor = Lastnost End End Set Javna lastnost FillImage () Kot Bitmap Pridobite FillImage = CenterSquareImage End Get Set (ByVal Value As Bitmap) CenterSquareImage = Vrednost konca konca Lastnost End Razred
Zakaj je verzija BetterCheckBox boljša
Ena glavnih izboljšav je dodajanje dveh Lastnosti. To je stari razred sploh ni počel.
Uvedeni dve novi lastnosti sta
FillColor
in
FillImage
Če želite dobiti okus, kako to deluje v VB.NET, poskusite s tem preprostim poskusom. Dodajte razred v standardni projekt in nato vnesite kodo:
Javna lastnina Karkoli dobite
Ko pritisnete Enter, potem ko vtipkate "Pridobi", VB.NET Intellisense izpolni celoten blok kode lastnosti in vse, kar morate storiti, je, da kodirate posebnosti vašega projekta. (Bloki Get and Set niso vedno potrebni, začenši z VB.NET 2010, zato morate vsaj toliko povedati Intellisense, da ga začnete.)
Javna lastnina ne glede na to, kako se konča Set Set (ByVal value) End SetEnd Lastnost
Ti bloki so izpolnjeni v zgornji kodi. Namen teh blokov kode je omogočiti dostop do vrednosti lastnosti iz drugih delov sistema.
Z dodajanjem metod bi bili na dobri poti do ustvarjanja popolne komponente. Če si želite ogledati zelo preprost primer metode, dodajte to kodo pod izjave lastnosti v razredu betterCheckBox:
Javni podčrtaj () Jaz. Pisava = Nov sistem. Risba. Pisava (_ "Microsoft Sans Serif", 12.0!, _ sistem. Risba. FontStyle. Drzno) Jaz. Velikost = Nov sistem. Risba. Velikost (200, 35) CenterSquare. Odmik (CenterSquare). Levo - 3, CenterSquare. Na vrh + 3) Končni pod
Poleg prilagoditve pisave, prikazane v CheckBoxu, ta metoda prilagodi tudi velikost polja in lokacijo preverjenega pravokotnika, da upošteva novo velikost. Če želite uporabiti novo metodo, jo preprosto kodirajte na enak način kot katero koli:
MyBetterEmphasizedBox. Poudarite ()
In tako kot Properties, tudi Visual Studio samodejno doda novo metodo v Microsoftov Intellisense!
Glavni cilj tukaj je preprosto pokazati, kako je metoda kodirana. Morda se zavedate, da standardni kontrolnik CheckBox omogoča tudi spreminjanje pisave, tako da ta metoda v resnici ne dodaja veliko funkcije.
Naslednji članek v tej seriji Programiranje krmiljenja VB.NET po meri - zunaj osnov!, prikazuje način, ki to deluje, in tudi pojasnjuje, kako prevladati metodo v nadzoru po meri.