Luokan ohjelmointi mukautetun VB.NET-ohjaimen luomiseksi

Täydellisten mukautettujen komponenttien rakentaminen voi olla erittäin edistynyt projekti. Mutta voit rakentaa VB.NET-luokan, jolla on monia työkalupakin komponentin etuja paljon vähemmän vaivaa. Tässä on miten!

Kokeile tätä kokeilua saadaksesi maku siitä, mitä sinun on tehtävä täydellisen mukautetun komponentin luomiseksi:

-> Avaa uusi Windows-sovellusprojekti VB.NET: ssä.
-> Lisää valintaruutu työkalulaatikosta lomakkeeseen.
-> Napsauta "Näytä kaikki tiedostot" -painiketta yläosassa Solution Explorer.

Tämä näyttää tiedostot, jotka Visual Studio luo projektillesi (joten sinun ei tarvitse tehdä sitä). Historiallisena alaviitteenä VB6-kääntäjä teki paljon samoja asioita, mutta et koskaan päässyt koodiin, koska se oli haudattu koottuun "p-koodiin". Voit kehittää mukautettuja säätimiä myös VB6: ssa, mutta se oli paljon vaikeampaa ja vaati erityistä apuohjelmaa, jonka Microsoft toimitti juuri tätä tarkoitusta varten.

Muodossa Designer.vb tiedostosta huomaat, että alla oleva koodi on lisätty automaattisesti oikeisiin paikkoihin CheckBox-komponentin tukemiseksi. (Jos sinulla on erilainen Visual Studion versio, koodisi saattaa olla hiukan erilainen.) Tämän koodin Visual Studio kirjoittaa sinulle.

instagram viewer

'Vaatii Windows Form Designer Yksityiset komponentit _ Kuten järjestelmä. ComponentModel. IContain'HUOMAUTUS: Seuraava menettely on tarpeen Windows-muotoilijalla'Sitä voidaan muokata Windows Form Designer -sovelluksella.'Älä muokata sitä koodieditorilla. _Private Sub InitializeComponent () Me. CheckBox1 = Uusi järjestelmä. Windows. Lomakkeet. CheckBox () Me. SuspendLayout () '' CheckBox1 'Me. CheckBox1.AutoSize = True Me. CheckBox1.Location = Uusi järjestelmä. Piirustus. Kohta (29, 28) minä. CheckBox1.Name = "CheckBox1".. . ja niin edelleen ...

Tämä on koodi, joka sinun on lisättävä ohjelmaan luodaksesi mukautetun ohjaimen. Muista, että kaikki todellisen CheckBox-ohjauksen menetelmät ja ominaisuudet ovat luokassa, jonka toimittaa .NET-kehys: Järjestelmä. Windows. Lomakkeet. valintaruudun. Tämä ei ole osa projektiasi, koska se on asennettu Windowsin kaikkiin .NET-ohjelmiin. Mutta siellä on erä siitä.

Toinen huomioitava asia on, että jos käytät WPF (Windows Presentation Foundation) .NET CheckBox -luokka tulee aivan erilaisesta kirjastosta nimeltä Järjestelmä. Windows. ohjaimet. Tämä artikkeli toimii vain Windows Forms -sovelluksessa, mutta perintöperiaatteet toimivat missä tahansa VB.NET-projektissa.

Oletetaan, että projektisi tarvitsee ohjauksen, joka on hyvin samankaltainen kuin yksi vakiosäätimistä. Esimerkiksi valintaruutu, joka muutti väriä tai näytti pienen "onnellisen kasvon" pienen "tarkistus" -grafiikan sijaan. Aiomme rakentaa luokan, joka tekee tämän ja näyttää sinulle, kuinka lisätä se projektiisi. Vaikka tästä voi olla hyötyä itsessään, todellinen tavoite on osoittaa VB.NET: n toiminta perintö.

Aloitetaan koodaus

Aloita muuttamalla tarkistuslaatikon nimi, johon juuri lisäsit oldCheckBox. (Haluat ehkä lopettaa "Näytä kaikki tiedostot" uudelleen näyttämisen uudelleen yksinkertaistaaksesi Solution Explorer -sovellusta.) Lisää nyt uusi luokka projektiisi. Voit tehdä tämän monella tapaa, esimerkiksi napsauttamalla hiiren kakkospainikkeella projektia Solution Explorerissa ja valitsemalla Projekti-valikon kohdasta Lisää ja sitten Luokka tai valitsemalla Lisää luokka. Muuta uuden luokan tiedostonimi muotoon newCheckBox pitää asiat suorana. Avaa lopuksi luokan koodi-ikkuna ja lisää tämä koodi:

Julkinen luokka newCheckBox -perintöjä CheckBox Private CenterSquareColor Kuten väri = väri. Punainen suojattu ohittaa Sub OnPaintin (ByVal pEvent _ Kuten PaintEventArgs) Himmennä CenterSquare _ Uutena suorakulmiona (3, 4, 10, 12) MyBase. OnPaint (pEvent) Jos minä. Tarkistettu Sitten tapahtuma. Grafiikkaa. Täydellinen suorakulmio (Uusi SolidBrush (CenterSquareColor), CenterSquare) End If End SubEnd Class

(Tässä artikkelissa ja muissa sivuston sivustoissa käytetään paljon rivin jatkoa linjojen pitämiseksi lyhyinä, jotta ne mahtuvat verkkosivun käytettävissä olevaan tilaan.)

Ensimmäinen asia, joka huomaa uudessa luokkoodissasi, on perii avainsana. Tämä tarkoittaa, että kaikki VB.NET Framework -valintaruudun ominaisuudet ja menetelmät ovat automaattisesti osa tätä. Jotta ymmärrät kuinka paljon työtä tämä säästää, sinun on oltava kokeillut jotain CheckBox-komponentin ohjelmointia tyhjästä.

Yllä olevassa koodissa on huomioitava kaksi avainta:

Ensimmäinen on koodin käyttö Ohittaa korvaamaan standardin .NET käyttäytyminen, joka tapahtuisi OnPaint tapahtuma. OnPaint-tapahtuma käynnistyy aina, kun Windows huomaa, että näytön osa on rekonstruoitava. Esimerkki olisi, kun toinen ikkuna paljastaa osan näytöstä. Windows päivittää näytön automaattisesti, mutta kutsuu sitten koodisi OnPaint-tapahtuman. (OnPaint-tapahtumaa kutsutaan myös, kun lomake luodaan alun perin.) Joten jos ohitamme OnPaintin, voimme muuttaa tapaa, jolla asiat näyttävät näytöltä.

Toinen tapa Visual Basic luo tarkistuslaatikon. Aina kun vanhempi on "tarkastettu" (eli Minä. tarkistettu On Totta) sitten uusi koodi, jonka tarjoamme NewCheckBox-luokassamme, väri väristää CheckBoxin keskikohdan tarkistusmerkin piirtämisen sijasta.

Loppu on mitä kutsutaan GDI + -koodi. Tämä koodi valitsee suorakulmion, joka on täsmälleen sama kuin valintaruudun keskusta, ja värittää sen GDI + -menetelmäkutsuilla. Punaisen suorakulmion, "suorakulmion (3, 4, 10, 12)" sijoittamiseen tarkoitetut "maagiset numerot" määritettiin kokeellisesti. Muutin vain sitä, kunnes se näytti oikealta.

On yksi erittäin tärkeä vaihe, jonka haluat varmistaa, ettet jätä syrjäyttämättä ohitusmenettelyjä:

MyBase. OnPaint (pEvent)

Ohitus tarkoittaa, että koodi antaa kaikki tapahtuman koodista. Mutta tämä on harvoin mitä haluat. Joten VB tarjoaa tavan suorittaa normaali .NET-koodi, joka olisi suoritettu tapahtumalle. Tämä on lausunto, joka tekee sen. Se välittää saman parametrin - pEvent - tapahtumakoodille, joka olisi toteutettu, jos sitä ei olisi ohitettu, MyBase. OnPaint.

Uuden ohjaimen käyttö

Koska uutta ohjainta ei ole työkalupakissamme, se on luotava koodimuodossa. Paras paikka tehdä se on muodossa Ladata tapahtumamenettely.

Avaa lomakkeen lataustapahtumakoodin ikkuna ja lisää tämä koodi:

Yksityinen Sub frmCustCtrlEx_Load (ByVal-lähettäjä järjestelmänä. Kohde, ByVal e As System. EventArgs) käsittelee MyBasea. Lataa himmennetty customCheckBox uutena newCheckBox () with customCheckBox .Text = "Custom CheckBox" .Left = oldCheckBox. Vasen .Top = oldCheckBox. Yläosa + oldCheckBox. Korkeus .Koko = Uusi koko (oldCheckBox. Koko. Leveys + 50, oldCheckBox. Koko. Korkeus) Lopeta säätimillä. Lisää (customCheckBox) End Sub

Sijoita uusi valintaruutu lomakkeeseen olemme hyödyntäneet sitä, että sellainen on jo olemassa, ja olemme vain käyttäneet sen kokoa ja sijaintia (mukautettu niin, että Teksti-ominaisuus sopii). Muuten meidän pitäisi koodata sijainti manuaalisesti. Kun MyCheckBox on lisätty lomakkeeseen, lisäämme sen sitten Controls-kokoelmaan.

Mutta tämä koodi ei ole kovin joustava. Esimerkiksi punainen väri on kovakoodattu ja värin muuttaminen vaatii ohjelman muuttamisen. Voit myös haluta grafiikan valintamerkin sijasta.

Tässä on uusi, parannettu CheckBox-luokka. Tämä koodi osoittaa sinulle kuinka suorittaa jotkut seuraavista vaiheista kohti VB.NET-olio-ohjelmointia.

Public Class betterCheckBox -perintöjä CheckBox Private CenterSquareColor Kuten väri = väri. Sininen Private CenterSquareImage Kuten bittikartta Private CenterSquare kuin uusi suorakulmio (3, 4, 10, 12) Suojattu ohittaa Sub OnPaint -sovelluksen _ (ByVal pEvent As _ -järjestelmä). Windows. Lomakkeet. PaintEventArgs) MyBase. OnPaint (pEvent) Jos minä. Tarkistettu sitten, jos CenterSquareImage ei ole mitään sitten pEvent. Grafiikkaa. Täydellinen suorakulmio (Uusi SolidBrush (CenterSquareColor), CenterSquare) Muu pEvent. Grafiikkaa. DrawImage (CenterSquareImage, CenterSquare) End if End End End End Public Public Property FillColor () väreinä Get FillColor = CenterSquareColor End End Set (ByVal Value as Color) CenterSquareColor = Arvo lopussa Aseta lopussa omaisuus Julkinen omaisuus FillImage () bittikarttaksi saada FillImage = CenterSquareImage loppu saada asetettu (ByVal arvo kuin bittikartta) CenterSquareImage = arvo lopussa asetettu lopussa ominaisuus loppu luokka

Miksi BetterCheckBox-versio on parempi

Yksi tärkeimmistä parannuksista on kahden lisääminen ominaisuudet. Tätä vanha luokka ei tehnyt ollenkaan.

Kaksi uutta käyttöön otettua kiinteistöä ovat

Täyttöväri

ja

FillImage

Kokeile tätä yksinkertaista koetta saadaksesi kuvan siitä, miten tämä toimii VB.NET: ssä. Lisää luokka vakioprojektiin ja kirjoita sitten koodi:

Julkinen omaisuus mitä tahansa

Kun painat Enter-näppäintä kirjoittaessasi "Hanki", VB.NET Intellisense täyttää koko Ominaisuuskoodilohkon ja kaikki mitä sinun on tehtävä on koodata projektisi yksityiskohdat. (Hanki ja aseta -lohkoja ei aina vaadita VB.NET 2010: stä alkaen, joten joudut ainakin kertomaan Intellisenseelle niin paljon aloittaaksesi.)

Julkinen omaisuus riippumatta siitä, mitä päättyy, asetetaan (ByVal-arvo) End SetEnd -omaisuus

Nämä lohkot on suoritettu yllä olevaan koodiin. Näiden koodilohkojen tarkoituksena on antaa ominaisuusarvoille pääsy järjestelmän muista osista.

Menetelmien lisäämisellä voit olla hyvä tapa luoda kokonainen komponentti. Jos haluat nähdä hyvin yksinkertaisen esimerkin menetelmästä, lisää tämä koodi betterCheckBox-luokan omaisuusilmoitusten alle:

Julkinen alakorosta () minua. Fontti = Uusi järjestelmä. Piirustus. Kirjasin (_ "Microsoft Sans Serif", 12.0!, _ Järjestelmä. Piirustus. Fonttityyli. Lihavoitu) minä. Koko = Uusi järjestelmä. Piirustus. Koko (200, 35) CenterSquare. Offset (CenterSquare. Vasen - 3, CenterSquare. Yläosa + 3) Loppu alaosaan

Valintaruudussa näkyvän fontin säätämisen lisäksi tämä menetelmä säätää myös ruudun koon ja valitun suorakaiteen sijainnin uuden koon huomioon ottamiseksi. Voit käyttää uutta menetelmää vain koodittamalla sen samalla tavalla kuin mitä tahansa menetelmää:

MyBetterEmphasizedBox. Painottaa ()

Ja aivan kuten Ominaisuudet, Visual Studio lisää uuden menetelmän automaattisesti Microsoftin Intellisense-ohjelmaan!

Päätavoite on yksinkertaisesti osoittaa, kuinka menetelmä koodataan. Saatat olla tietoinen, että tavallinen CheckBox-ohjaus sallii myös fontin vaihtamisen, joten tämä menetelmä ei oikeastaan ​​lisää paljon toimintoa.

Seuraava tämän sarjan artikkeli, Mukautetun VB.NET-ohjauksen ohjelmointi - perusteiden ulkopuolella!, Osoittaa menetelmän, joka toimii, ja myös selittää, kuinka ohittaa menetelmä mukautetussa ohjauksessa.