Sukurti pilnus pasirinktinius komponentus gali būti labai pažangus projektas. Bet jūs galite sukurti VB.NET klasę, kuri turi daug įrankių dėžės komponento pranašumų, kur daug mažiau pastangų. Štai kaip!
Jei norite sužinoti, ką turite padaryti, kad sukurtumėte visą pasirinktinį komponentą, išbandykite šį eksperimentą:
-> VB.NET atidarykite naują „Windows“ programos projektą.
-> Pridėkite žymės langelį iš įrankių dėžutės į formą.
-> Spustelėkite mygtuką "Rodyti visus failus" viršuje Sprendimų naršyklė.
Čia bus rodomi failai, kuriuos „Visual Studio“ sukuria jūsų projektui (taigi jums to nereikia). Kaip istorinė išnaša, VB6 kompiliatorius padarė daug tų pačių dalykų, tačiau niekada negalėjote pasiekti kodo, nes jis buvo palaidotas sudarytame „p-kode“. Taip pat galite kurti pasirinktinius valdiklius VB6, bet tai buvo daug sunkiau ir tam reikėjo specialios priemonės, kurią „Microsoft“ tiekė būtent tam tikslui.
Formoje Dizaineris.vb failą, pamatysite, kad žemiau pateiktas kodas buvo automatiškai pridėtas tinkamose vietose palaikyti „CheckBox“ komponentą. (Jei turite kitą „Visual Studio“ versiją, jūsų kodas gali šiek tiek skirtis.) Tai yra kodas, kurį „Visual Studio“ rašo jums.
„Reikalaujama„ Windows Form Designer “privačių komponentų _ kaip sistemos. „ComponentModel“. „IC Container“ PASTABA: „Windows Form Designer“ būtina atlikti šią procedūrą „Ją galima modifikuoti naudojant„ Windows Form Designer “.“ Nekeiskite jos naudodami kodų rengyklę._Private Sub InitializeComponent () Me. „CheckBox1“ = Nauja sistema. „Windows“. Formos. „CheckBox“ () aš. SuspendLayout () '' CheckBox1 'Me. CheckBox1.AutoSize = Tikras aš. „CheckBox1.Location“ = Nauja sistema. Piešimas. Taškas (29, 28) Aš. CheckBox1.Name = "CheckBox1".. . ir taip toliau ...
Tai yra kodas, kurį turite įtraukti į savo programą, kad sukurtumėte pasirinktinį valdiklį. Atminkite, kad visi tikrojo „CheckBox“ valdymo metodai ir savybės priklauso klasei, tiekiamai .NET Framework: Sistema. „Windows“. Formos. Žymimasis langelis. Tai nėra jūsų projekto dalis, nes ji įdiegta „Windows“ visoms .NET programoms. Bet yra daug iš jo.
Kitas dalykas, kurį reikia žinoti, yra tas, kad jei naudojate WPF („Windows Presentation Foundation“) .NET CheckBox klasė yra iš visiškai kitos bibliotekos, pavadintos Sistema. „Windows“. Valdikliai. Šis straipsnis veikia tik naudojant „Windows Forms“ programą, tačiau paveldėjimo principai čia veikia bet kuriame VB.NET projekte.
Tarkime, kad jūsų projektui reikalinga kontrolė, kuri labai primena vieną iš standartinių valdiklių. Pvz., Žymimasis langelis, kuris pakeitė spalvą arba rodė mažą „laimingą veidą“, užuot rodęs mažą „patikrinimo“ grafiką. Mes sukursime klasę, kuri tai padarys, ir parodysime, kaip įtraukti ją į savo projektą. Nors tai gali būti naudinga savaime, tikrasis tikslas yra parodyti VB.NET paveldėjimas.
Pradėkime kodavimą
Norėdami pradėti, pakeiskite „CheckBox“, kurį ką tik pridėjote, pavadinimą „oldCheckBox“. (Galbūt norėsite vėl nerodyti „Rodyti visus failus“, kad supaprastintumėte „Solution Explorer“.) Dabar pridėkite naują klasę prie savo projekto. Tai galima padaryti keliais būdais, įskaitant dešiniuoju pelės mygtuku spustelėjus projektą „Solution Explorer“ ir pasirinkus „Pridėti“, tada „Klasė“ arba meniu „Projektas“ pasirinkus „Pridėti klasę“. Pakeiskite naujos klasės failo pavadinimą į „newCheckBox“ kad viskas būtų tiesi. Galiausiai atidarykite klasės kodo langą ir pridėkite šį kodą:
„PublicClass“ naujoji „CheckBox“ pavelda „CheckBox“ privatus centras „quareColor “kaip spalva = spalva. Raudonai apsaugoti „OnPaint“ („ByVal pEvent _“ kaip „PaintEventArgs“) „Dim CenterSquare“ _ Kaip naujas stačiakampis (3, 4, 10, 12) „MyBase“. „OnPaint“ (įvykis) Jei aš. Patikrinta Tada įvykis. Grafika. „FillRectangle“ (Naujas „SolidBrush“ („CenterSquareColor“), „CenterSquare“) Pabaiga, jei pabaiga „SubEnd“ klasė
(Šiame ir kituose svetainės straipsniuose naudojama daugybė eilučių, kad linijos būtų trumpos, kad jos tilptų tinklalapyje esančioje vietoje.)
Pirmas dalykas, kurį reikia pastebėti apie jūsų naują klasės kodą Paveldėjimai raktinis žodis. Tai reiškia, kad visos „VB.NET Framework CheckBox“ savybės ir metodai yra automatiškai šio elemento dalis. Norėdami įvertinti, kiek tai sutaupo, turite išbandyti nuo nulio ką nors panašaus į „CheckBox“ komponentą.
Aukščiau pateiktame kode reikia pastebėti du pagrindinius dalykus:
Pirmasis yra kodas naudoja Nepaisykite pakeisti standartinę .NET elgseną, kuri vyktų „OnPaint“ įvykis. „OnPaint“ įvykis suaktyvinamas kiekvieną kartą, kai „Windows“ pastebi, kad reikia rekonstruoti jūsų ekrano dalį. Pavyzdys gali būti, kai kitas langas atidengia jūsų ekrano dalį. „Windows“ automatiškai atnaujina ekraną, bet tada iškviečia „OnPaint“ įvykį jūsų kode. („OnPaint“ įvykis taip pat vadinamas, kai forma iš pradžių sukuriama.) Taigi, jei nepaisysime „OnPaint“, galime pakeisti tai, kaip viskas atrodo ekrane.
Antrasis yra „Visual Basic“ būdas sukurti „CheckBox“. Kai tėvas yra „tikrinamas“ (tai yra, Aš. Patikrinta yra Tiesa), tada naujas kodas, kurį mes pateikėme mūsų „NewCheckBox“ klasėje, pakeis „CheckBox“ centrą, o ne nupiešia varnelę.
Likusi dalis yra tai, kas vadinama GDI + kodas. Šis kodas parenka tiksliai tokio paties dydžio stačiakampį kaip žymimojo langelio centras ir nuspalvina jį GDI + metodo skambučiais. „Magiški skaičiai“, skirti raudonam stačiakampiui išdėstyti, „Stačiakampis (3, 4, 10, 12)“ buvo nustatyti eksperimentiniu būdu. Aš jį tiesiog pakeičiau, kol jis atrodė teisingas.
Yra vienas labai svarbus žingsnis, kurį norite užtikrinti, kad nepaisytumėte nepaisymo procedūrų:
„MyBase“. „OnPaint“ („pEvent“)
Nepaisymas reiškia, kad jūsų kodas pateiks visi įvykio kodo. Bet to retai norisi. Taigi VB suteikia galimybę paleisti įprastą .NET kodą, kuris būtų įvykdytas įvykiui. Tai teiginys, kuris tai daro. Jis perduoda tą patį parametrą - „pEvent“ - įvykio kodui, kuris būtų buvęs įvykdytas, jei jis nebūtų buvęs pakeistas, „MyBase“. „OnPaint“.
Naudojant naują valdiklį
Kadangi mūsų naujojo valdiklio nėra įrankių dėžėje, jis turi būti sukurtas su kodu. Geriausia vieta tai padaryti yra forma Apkrova renginio procedūra.
Atidarykite formos įkėlimo įvykio procedūros kodą ir pridėkite šį kodą:
Privatus „subm“ „frmCustCtrlEx_Load“ („ByVal“ siuntėjas kaip sistema. Objektas, „ByVal e As“ sistema. „EventArgs“) tvarko „MyBase“. Įkelkite „Dim“ „customCheckBox“ kaip naują „newCheckBox“ () naudodami „customCheckBox“ .Text = "Custom CheckBox" .Left = oldCheckBox. Kairė. Viršus = oldCheckBox. „Top + oldCheckBox“. Aukštis .Size = Naujas dydis (oldCheckBox. Dydis. Plotis + 50, „oldCheckBox“. Dydis. Aukštis) pabaiga valdikliais. Pridėti („CustomCheckBox“) pabaigos poskyrį
Norėdami įklijuoti naują žymimąjį langelį į formą, pasinaudojome tuo, kad toks jau yra, ir tiesiog panaudojome tos formos dydį ir vietą (pakoreguota, kad teksto ypatybė tiktų). Priešingu atveju turėtume koduoti vietą rankiniu būdu. Kai „MyCheckBox“ buvo pridėtas prie formos, mes ją pridėsime prie „Controls“ kolekcijos.
Bet šis kodas nėra labai lankstus. Pavyzdžiui, raudona spalva yra sunkiai koduojama ir norint pakeisti spalvą reikia pakeisti programą. Taip pat galbūt norėsite grafikos, o ne varnelės.
Štai nauja, patobulinta „CheckBox“ klasė. Šis kodas parodo jums, kaip atlikti keletą tolesnių žingsnių link VB.NET objektinio programavimo.
„Public Class betterCheckBox“ paveldėjimai „CheckBox Private CenterSquareColor“ kaip spalva = spalva. „Blue Private CenterSquareImage As Bitmap Private CenterSquare As New Stačiakampis“ (3, 4, 10, 12) Apsaugotas nepaisys „Sub OnPaint“ _ („ByVal pEvent As“ sistema. „Windows“. Formos. „PaintEventArgs“). „OnPaint“ (įvykis) Jei aš. Patikrinta tada, jei „CenterSquareImage“ nieko nėra, tada įvykis. Grafika. „FillRectangle“ (naujas „SolidBrush“ („CenterSquareColor“), „CenterSquare“) „Else pEvent“. Grafika. „DrawImage“ („CenterSquareImage“, „CenterSquare“) Pabaiga, jei pasibaigia, jei pasibaigia viešosios nuosavybės „FillColor“ () kaip spalva gauti „FillColor“ = „CenterSquareColor“ pabaiga „Nustatyti“ („ByVal“ vertė kaip spalva) „CenterSquareColor“ = Reikšmė Pabaigos rinkinys Pabaigos nuosavybė Viešoji nuosavybė „FillImage“ () kaip „Bitmap Get FillImage“ = „CenterSquareImage“ Pabaiga Gaukite rinkinį („ByVal“ vertė kaip bitkoinas) CenterSquareImage = Reikšmė „End End Set End PropertyEnd“ Klasė
Kodėl „BetterCheckBox“ versija yra geresnė
Vienas pagrindinių patobulinimų yra dviejų papildymas Savybės. Senoji klasė to nepadarė.
Įvestos dvi naujos savybės
„FillColor“
ir
„FillImage“
Norėdami sužinoti, kaip tai veikia VB.NET, išbandykite šį paprastą eksperimentą. Pridėkite klasę prie standartinio projekto ir įveskite kodą:
Visuomeninė nuosavybė, kad ir ką gautumėte
Kai paspaudžiate Enter po to, kai įvedate „Get“, „VB.NET Intellisense“ užpildo visą nuosavybės kodo bloką ir viskas, ką jums reikia padaryti, yra koduoti jūsų projekto specifiką. („Get and Set“ blokai ne visada reikalingi pradedant nuo VB.NET 2010, todėl jūs turite bent jau pasakyti tiek informacijos „Intellisense“, kad ją paleistumėte.)
Visuomeninė nuosavybė, kad ir kokia galu gautumėte, „Set Bynd End“ nuosavybė
Šie blokai buvo užpildyti aukščiau pateiktu kodu. Šių kodo blokų paskirtis yra leisti nuosavybės vertėms pasiekti iš kitų sistemos dalių.
Pridėjus metodų, jums bus geras būdas sukurti visą komponentą. Norėdami pamatyti labai paprastą metodo pavyzdį, pridėkite šį kodą po „betterCheckBox“ klasės turto deklaracijomis:
Visuomenė pabrėžė () mane. Šriftas = Nauja sistema. Piešimas. Šriftas (_ „Microsoft Sans Serif“, 12.0!, _ Sistema. Piešimas. Šrifto stilius. Bold) Aš. Dydis = Nauja sistema. Piešimas. Dydis (200, 35) „CenterSquare“. „Offset“ („CenterSquare“. Kairėje - 3, „CenterSquare“. Viršuje + 3) Pabaigos poskyris
Šis metodas ne tik reguliuoja „CheckBox“ rodomą šriftą, bet ir koreguoja langelio dydį ir patikrinto stačiakampio vietą, kad būtų galima atsižvelgti į naują dydį. Norėdami naudoti naująjį metodą, tiesiog užkoduokite jį taip pat, kaip ir bet kurį metodą:
„MyBetterEmphasizedBox“. Pabrėžti()
Kaip ir „Properties“, „Visual Studio“ automatiškai prideda naują metodą prie „Microsoft“ Intellisense!
Pagrindinis tikslas yra tiesiog parodyti, kaip metodas koduojamas. Galbūt žinote, kad standartinis „CheckBox“ valdiklis taip pat leidžia pakeisti šriftą, todėl šis metodas iš tikrųjų neprideda daug funkcijų.
Kitame šios serijos straipsnyje „Individualizuotos VB.NET valdymo programavimas - be pagrindų!“ Parodytas metodas, kuris veikia, taip pat paaiškinta, kaip nepaisyti pasirinktinio valdymo metodo.