Klassi programmeerimine kohandatud VB.NET-juhtelemendi loomiseks

Täielike kohandatud komponentide ehitamine võib olla väga arenenud projekt. Kuid võite ehitada VB.NET-klassi, millel on tööriistakasti komponendi palju eeliseid, palju vähem vaeva. Siit saate teada, kuidas!

Täpse kohandatud komponendi loomiseks vajalike toimingute mõistmiseks proovige seda katset:

-> Avage uus Windowsi rakenduste projekt VB.NET-is.
-> Lisage vormile tööriistakastist linnuke.
-> Klõpsake lehe ülaosas nuppu "Kuva kõik failid" Lahenduste uurija.

Kuvatakse failid, mille Visual Studio teie projekti jaoks loob (nii et te ei pea seda tegema). Ajaloolise märkusena tegi VB6 kompilaator palju samu asju, kuid te ei saanud kunagi koodi juurde pääseda, kuna see oli maetud kompileeritud "p-koodi". Saate ka kohandatud juhtelemente arendada VB6-s, kuid see oli palju keerulisem ja nõudis spetsiaalset utiliiti, mille Microsoft just selleks tarnis.

Vormis Kujundaja.vb failist leiate, et allolev kood on automaatselt lisatud õigesse kohta, et CheckBoxi komponenti toetada. (Kui teil on Visual Studio erinev versioon, võib teie kood pisut erineda.) See on kood, mille Visual Studio teile kirjutab.

instagram viewer

'Nõutavad Windowsi vormikujundaja privaatsed komponendid _ kui süsteem. ComponentModel. IContainer'MÄRKUS: Windowsi vormidisaineriga on nõutav järgmine protseduur'Seda saab muuta Windowsi vormidisaineriga.'Ärge muutke seda koodiredaktori abil. _Private Sub InitializeComponent () Me. CheckBox1 = Uus süsteem. Windows. Vormid. CheckBox () mina. SuspendLayout () '' CheckBox1 'Me. CheckBox1.AutoSize = Tõeline mina. CheckBox1.Location = Uus süsteem. Joonistamine. Punkt (29, 28) Mina. CheckBox1.Name = "CheckBox1".. . ja nii edasi ...

See on kood, mille peate oma programmi lisama, et luua kohandatud juhtelement. Pidage meeles, et kõik tegeliku CheckBoxi juhtelementide meetodid ja omadused kuuluvad klassi. NET Framework: Süsteem. Windows. Vormid. CheckBox. See ei ole teie projekti osa, kuna see on Windowsi installitud kõigi .NET-programmide jaoks. Kuid seal on a palju sellest.

Veel üks asi, mida peaksite teadma, on see, et kui kasutate WPF (Windows Presentation Foundation) .NET CheckBoxi klass pärineb täiesti teistsugusest teegist nimega Süsteem. Windows. Juhtelemendid. See artikkel töötab ainult Windowsi vormide rakenduste jaoks, kuid siin kehtivad pärimispõhimõtted mis tahes VB.NET-projekti jaoks.

Oletame, et teie projekt vajab juhtelementi, mis sarnaneb suuresti ühe standardse juhtelemendiga. Näiteks märkeruut, mis muutis värvi või kuvab pisikese „kontroll” graafika asemel pisikese „õnneliku näo”. Me ehitame klassi, mis seda teeb, ja näitame teile, kuidas seda oma projekti lisada. Kuigi see võib iseenesest kasulik olla, on tegelik eesmärk näidata VB.NET-i pärimine.

Alustame kodeerimist

Alustamiseks muutke äsja lisatud ruudu nime oldCheckBox. (Lahenduse uurija lihtsustamiseks võiksite uuesti lõpetada "Kuva kõik failid" kuvamise.) Lisage nüüd oma projekti uus klass. Selleks on mitu viisi, sealhulgas paremklõpsake projektis Solution Exploreris projekti paremklõpsu ja valige menüükäsu Projekt alt "Add", siis "Class" või valige "Add Class". Muutke uue klassi failinimi väärtuseks newCheckBox hoida asju sirge. Lõpuks avage klassi koodiaken ja lisage see kood:

Avalik klass newCheckBox pärib CheckBoxi erakeskuseSquareColor kui värv = värv. Punane kaitstud alistab Sub OnPainti (ByVal pEvent _ kui PaintEventArgs) Hämarda CenterSquare _ Nagu uus ristkülik (3, 4, 10, 12) MyBase. OnPaint (pEvent) Kui mina. Kontrollitud siis pEvent. Graafika. FillRectangle (Uus SolidBrush (CenterSquareColor), CenterSquare) End If End SubEnd klassi lõpp

(Selles artiklis ja teistes saidi artiklites kasutatakse ridade jätkumist, et read lühikeseks jääksid, nii et need mahuvad veebilehel saadaolevasse ruumi.)

Esimene asi, mida oma uue klassi koodi juures tähele panna, on Pärandid märksõna. See tähendab, et kõik VB.NET Framework CheckBoxi omadused ja meetodid kuuluvad automaatselt selle juurde. Hindamaks, kui palju tööd see kokku hoiab, peate olema proovinud midagi nullist alates CheckBoxi komponenti.

Ülaltoodud koodis tuleb tähele panna kahte peamist asja:

Esimene on koodikasutus Üle kirjutada asendada standardne .NET käitumine, mis toimuks OnPaint sündmus. OnPainti sündmus käivitatakse alati, kui Windows märkab, et osa teie kuvarist tuleb rekonstrueerida. Näiteks võib see olla siis, kui mõni muu aken katab osa teie kuvarist. Windows värskendab kuva automaatselt, kuid kutsub siis teie koodis OnPainti sündmuse. (OnPainti sündmust kutsutakse ka siis, kui vorm algselt luuakse.) Nii et kui alistada OnPaint, saame muuta seda, kuidas asjad ekraanil näevad.

Teine on viis, kuidas Visual Basic loob ruutu. Kui vanem on kontrollitud (see tähendab, Mina. Kontrollitud on Tõsi), siis uus kood, mille pakume oma NewCheckBoxi klassis, värvib uuesti linnukese joonistamise asemel CheckBoxi keskpunkti.

Ülejäänud on nn GDI + kood. See kood valib ruudu keskel täpselt sama suuruse ristküliku ja värvib selle GDI + meetodikõnedega. Punase ristküliku "ristkülik (3, 4, 10, 12)" "võluarvu" määrati katseliselt. Ma lihtsalt muutsin seda, kuni see tundus õige.

On üks väga oluline samm, mille abil soovite veenduda, et te ei jätaks funktsiooni Ümberlükkamine välja:

MyBase. OnPaint (pEvent)

Override tähendab, et teie kood pakub kõik sündmuse koodi. Kuid seda soovite harva. Seega pakub VB viisi tavalise .NET-koodi käivitamiseks, mis oleks sündmuse jaoks täidetud. See on väide, mis seda teeb. See edastab sama parameetri - pEvent - sündmuskoodile, mis oleks käivitatud, kui seda poleks tühistatud, MyBase. OnPaint.

Uue juhtelemendi kasutamine

Kuna meie uut juhtelementi pole meie tööriistakastis, tuleb see luua koodiga kujul. Parim koht selleks on vormis Koormus ürituse protseduur.

Avage vormi laadimise sündmuse protseduuri koodiaken ja lisage see kood:

Privaatne sub frmCustCtrlEx_Load (ByVal saatja kui süsteem. Objekt, ByVal e kui süsteem. EventArgs) haldab MyBase'i. Laadige timmima customCheckBox uue versioonina newCheckBox () koos kohandatudCheckBoxiga .Text = "Kohandatud kontrollboks" .Left = oldCheckBox. Vasak .Top = oldCheckBox. Ülemine + vanaCheckBox. Kõrgus .Size = Uus suurus (oldCheckBox. Suurus. Laius + 50, oldCheckBox. Suurus. Kõrgus) Lõpetage juhtnuppudega. Lisage (customCheckBox) lõpp alam

Uue märkeruudu vormile paigutamiseks kasutasime ära asjaolu, et selline juba olemas on ja kasutasime lihtsalt selle suurust ja asukohta (kohandatud, nii et atribuut Tekst sobib). Muidu peaksime asukoha käsitsi kodeerima. Kui MyCheckBox on vormile lisatud, lisame selle siis juhtelementide kogumisse.

Kuid see kood pole eriti paindlik. Näiteks värv punane on kõvakodeeritud ja värvi muutmiseks tuleb programmi muuta. Võib-olla soovite linnukese asemel graafikat.

Siin on uus, täiustatud CheckBoxi klass. See kood näitab teile, kuidas võtta mõned järgmised sammud VB.NETi objektorienteeritud programmeerimise suunas.

Avalik klass paremCheckBoxi pärandid CheckBoxi privaatkeskusSquareColor kui värv = värv. Sinine privaatne keskusSquareImage kui bitmap Private CenterSquare kui uus ristkülik (3, 4, 10, 12) Kaitstud alistab Sub OnPaint _ (ByVal pEvent As _ System). Windows. Vormid. PaintEventArgs) MyBase. OnPaint (pEvent) Kui mina. Kontrollige siis, kui CenterSquareImage pole midagi, siis pEvent. Graafika. FillRectangle (New SolidBrush (CenterSquareColor), CenterSquare) Else pEvent. Graafika. Joonistus (CenterSquareImage, CenterSquare) Lõpeta, kui lõpeb, kui lõpetab alamvalduse FillColor () värvina Hangi FillColor = CenterSquareColor Lõpeta seatud (ByVal väärtus värvina) CenterSquareColor = Väärtuse lõppkokkuvõtte lõppomand Avalik omand FillImage () kui bitmap saada FillImage = CenterSquareImage Lõppkokkuvõte (ByVal väärtus kui bittkartus) CenterSquareImage = Väärtus lõppkinnituse lõppväärtus PropertyEnd Klass

Miks on BetterCheckBoxi versioon parem

Üks peamisi parandusi on kahe lisamine Omadused. See on asi, mida vana klass üldse ei teinud.

Kaks uut tutvustatud kinnisvara on:

FillColor

ja

Täitke pilt

VB.NET-is toimimise kohta ülevaate saamiseks proovige seda lihtsat katset. Lisage klass tavaprojektile ja sisestage siis kood:

Avalik omand, mida iganes saab

Kui vajutate sisestusklahvi pärast sisestust „Hangi”, täidab VB.NET Intellisense kogu omandi koodiploki ja peate vaid kodeerima oma projekti spetsiifika. (Plokke Hangi ja Seadista ei pea alati alustama VB.NET 2010-st, seega peate selle käivitamiseks vähemalt Intellisense'ile seda ütlema.)

Avalik omand, mis iganes saab lõppu, seatakse (ByVal väärtus) End SetEnd vara

Need plokid on ülaltoodud koodiga täidetud. Nende koodiplokkide eesmärk on võimaldada juurdepääsu atribuutide väärtustele süsteemi muudest osadest.

Kui lisate ka meetodeid, oleksite teel täieliku komponendi loomisesse. Meetodi väga lihtsa näite saamiseks lisage see kood klassi betterCheckBox varadeklaratsioonide alla:

Avalik alaosa Rõhuta () mulle. Font = Uus süsteem. Joonistamine. Font (_ "Microsoft Sans Serif", 12.0!, _ Süsteem. Joonistamine. FontStyle. Julge) Mina. Suurus = uus süsteem. Joonistamine. Suurus (200, 35) CenterSquare. Offset (CenterSquare. Vasakul - 3, CenterSquare. Üles + 3) Lõpu alam

Lisaks kontrollboksis kuvatava fondi reguleerimisele kohandab see meetod uue kasti arvestamiseks ka kasti suurust ja kontrollitud ristküliku asukohta. Uue meetodi kasutamiseks kodeerige see samamoodi nagu mis tahes meetodil:

MyBetterEmphasizedBox. Rõhutama()

Ja nagu ka atribuudid, lisab Visual Studio uue meetodi automaatselt Microsofti Intellisense'isse!

Peamine eesmärk on lihtsalt näidata, kuidas meetodit kodeeritakse. Võib-olla olete teadlik, et tavaline CheckBoxi juhtseade võimaldab ka fonti muuta, nii et see meetod ei lisa tegelikult palju funktsioone.

Selle sarja järgmine artikkel, kohandatud VB.NET-juhtelemendi programmeerimine - lisaks põhitõdedele! Näitab meetodit, mis seda teeb, ja selgitab ka, kuidas kohandatud juhtseadises meetodit alistada.