Pilnīgu pielāgotu komponentu izveide var būt ļoti progresīvs projekts. Bet jūs varat izveidot VB.NET klasi, kurai ir daudz priekšrocību, kas piemīt rīkkopa komponentam, ar daudz mazāk piepūles. Lūk, kā!
Lai iegūtu priekšstatu par to, kas jums jādara, lai izveidotu pilnīgu pielāgotu komponentu, izmēģiniet šo eksperimentu:
-> Vietnē VB.NET atveriet jaunu Windows lietojumprogrammu projektu.
-> Veidlapai pievienojiet izvēles rūtiņu no rīklodziņa.
-> Noklikšķiniet uz pogas Rādīt visus failus Risinājumu pētnieks.
Tiks parādīti faili, kurus Visual Studio izveido jūsu projektam (tāpēc jums tas nav jādara). Kā vēsturiska zemsvītras piezīme VB6 kompilators izdarīja daudz to pašu, bet jūs nekad nevarējāt piekļūt šim kodam, jo tas ir apglabāts apkopotā "p-kodā". Jūs varētu arī izveidot pielāgotas vadīklas arī VB6, taču tas bija daudz grūtāk un prasīja īpašu utilītu, kuru Microsoft piegādāja tieši šim mērķim.
Veidlapā Dizaineris.vb failā, jūs atradīsit, ka zemāk esošais kods ir automātiski pievienots pareizajās vietās, lai atbalstītu CheckBox komponentu. (Ja jums ir cita Visual Studio versija, jūsu kods varētu nedaudz atšķirties.) Šis ir kods, kuru Visual Studio jums raksta.
'Pieprasa Windows veidlapu noformēšanas privātie komponenti _ kā sistēma. ComponentModel. PASTIPRINĀTĀJS: PIEZĪME: Windows formas noformētājam ir nepieciešama šāda procedūra'To var modificēt, izmantojot Windows formu noformētāju.'Nemodificējiet to, izmantojot koda redaktoru._Private Sub InitializeComponent () Me. CheckBox1 = jauna sistēma. Windows. Veidlapas. CheckBox () Me. SuspendLayout () '' CheckBox1 'Me. CheckBox1.AutoSize = True Me. CheckBox1.Location = Jauna sistēma. Zīmējums. Punkts (29, 28) Es. CheckBox1.Name = "CheckBox1".. . un tā tālāk ...
Šis ir kods, kas jāpievieno savai programmai, lai izveidotu pielāgotu vadīklu. Atcerieties, ka visas faktiskās CheckBox vadības metodes un īpašības ietilpst klasē, ko nodrošina .NET Framework: Sistēma. Windows. Veidlapas. CheckBox. Šī nav jūsu projekta sastāvdaļa, jo tas ir instalēts sistēmā Windows visām .NET programmām. Bet tur ir daudz no tā.
Vēl jāapzinās, ka, ja jūs izmantojat WPF (Windows Presentation Foundation). NET CheckBox klase nāk no pavisam citas bibliotēkas ar nosaukumu Sistēma. Windows. Kontroles. Šis raksts darbojas tikai lietojumprogrammai Windows Forms, taču mantojuma principi šeit darbojas jebkuram VB.NET projektam.
Pieņemsim, ka jūsu projektam nepieciešama kontrole, kas ļoti līdzinās vienai no standarta vadīklām. Piemēram, izvēles rūtiņa, kas mainīja krāsu vai parādīja niecīgu “laimīgu seju”, tā vietā, lai parādītu mazu “pārbaudes” grafiku. Mēs izveidosim klasi, kas to darīs, un parādīsim, kā to pievienot savam projektam. Lai gan tas pats par sevi varētu būt noderīgs, patiesais mērķis ir demonstrēt VB.NET mantojums.
Sāksim kodēšanu
Lai sāktu, mainiet tikko pievienotās rūtiņas nosaukumu oldCheckBox. (Iespējams, vēlēsities atkal pārtraukt “Rādīt visus failus”, lai vienkāršotu Solution Explorer.) Tagad savam projektam pievienojiet jaunu klasi. Ir vairāki veidi, kā to izdarīt, ieskaitot peles labo pogu noklikšķināšanu uz projekta Solution Explorer un izvēlnes “Projekts” atlasot “Pievienot”, pēc tam “Klase” vai atlasot “Pievienot klasi”. Mainiet jaunās klases faila nosaukumu uz newCheckBox lai lietas būtu taisnas. Visbeidzot atveriet klases koda logu un pievienojiet šo kodu:
Sabiedriskās klases newCheckBox mantojumi CheckBox Private CenterSquareColor kā krāsa = krāsa. Sarkani aizsargāts ignorē sub OnPaint (ByVal pEvent _ kā PaintEventArgs) Dim CenterSquare _ kā jauns taisnstūris (3, 4, 10, 12) MyBase. OnPaint (pEvent) Ja es. Pārbaudīts Tad notikums. Grafika. FillRectangle (Jauns SolidBrush (CenterSquareColor), CenterSquare) End EndEnd End End End End
(Šajā rakstā un citos vietnē tiek izmantots daudz līniju turpinājumu, lai līnijas būtu īsas, lai tās ietilptu tīmekļa vietnē pieejamajā vietā.)
Pirmais, ko pamanāt par jauno klases kodu, ir Mantojumi atslēgvārds. Tas nozīmē, ka visi VB.NET Framework pārbaudīšanas lodziņa rekvizīti un metodes automātiski ietilpst šajā. Lai novērtētu, cik daudz darba tas ietaupa, jums jau no sākuma ir jāizmēģina kaut kas līdzīgs CheckBox komponentam.
Iepriekš minētajā kodā ir jāņem vērā divas galvenās lietas:
Pirmais ir kodu izmantojums Ignorēt aizstāt standarta .NET uzvedību, kas notiktu OnPaint notikums. OnPaint notikums tiek aktivizēts ikreiz, kad Windows pamana, ka jūsu displeja daļa ir jārekonstruē. Kā piemēru var minēt gadījumus, kad cits logs atver daļu no jūsu displeja. Windows automātiski atjaunina displeju, bet pēc tam izsauc jūsu kodā OnPaint notikumu. (OnPaint notikums tiek izsaukts arī tad, kad forma sākotnēji tiek izveidota.) Tātad, ja mēs ignorējam OnPaint, mēs varam mainīt to, kā lietas izskatās uz ekrāna.
Otrais ir veids, kā Visual Basic izveido rūtiņu. Ikreiz, kad vecāks tiek pārbaudīts (tas ir, Es. Pārbaudīts ir Patiesībā), tad jaunais kods, ko mēs piedāvājam mūsu NewCheckBox klasē, krāsains lodziņa centrā mainīs krāsu, nevis atzīmēs.
Pārējais ir tas, ko sauc GDI + kods. Šis kods izvēlas taisnstūri tieši tādā pašā izmērā kā izvēles rūtiņas centrs un krāso to ar GDI + metodes izsaukumiem. "Maģiskie skaitļi" sarkanā taisnstūra "taisnstūris (3, 4, 10, 12)" novietošanai tika noteikti eksperimentāli. Es to vienkārši mainīju, līdz tas izskatījās pareizi.
Ir viens ļoti svarīgs solis, kuru vēlaties pārliecināties, ka nepametīsit ignorēšanas procedūras:
MyBase. OnPaint (pEvent)
Ignorēt nozīmē, ka jūsu kods to nodrošinās visiem no pasākuma koda. Bet tas reti ir tas, ko vēlaties. Tātad VB nodrošina veidu, kā palaist parasto .NET kodu, kas būtu izpildīts notikumam. Šis ir paziņojums, kas to dara. Tas pāriet to pašu parametru - pEvent - uz notikuma kodu, kas būtu izpildīts, ja tas nebūtu ticis ignorēts, MyBase. OnPaint.
Jaunās vadības izmantošana
Tā kā mūsu jaunā vadīkla nav mūsu rīklodziņā, tā ir jāizveido formā ar kodu. Labākā vieta, kur to izdarīt, ir forma Slodze pasākuma procedūra.
Atveriet koda logu formas ielādēšanas notikuma procedūrai un pievienojiet šo kodu:
Privāts sub frmCustCtrlEx_Load (ByVal sūtītājs kā sistēma. Objekts, ByVal e kā sistēma. EventArgs) apstrādā MyBase. Ielādēt dimC customCheckBox kā jaunu newCheckBox () ar customCheckBox .Text = "Custom CheckBox" .Left = oldCheckBox. Kreisais. Augšējais = oldCheckBox. Augšā + oldCheckBox. Augstums. Izmērs = Jauns izmērs (oldCheckBox. Izmērs. Platums + 50, oldCheckBox. Izmērs. Augstums) beidzas ar vadības ierīcēm. Pievienot (customCheckBox) Beigt apakšdaļu
Lai veidlapā ievietotu jauno izvēles rūtiņu, mēs esam izmantojuši faktu, ka tāda jau ir, un mēs vienkārši izmantojām tās lielumu un novietojumu (pieregulēts tā, lai īpašums Teksts derētu). Pretējā gadījumā mums pozīcija būtu jākodē manuāli. Kad MyCheckBox ir pievienots veidlapai, mēs to pievienojam Controls kolekcijai.
Bet šis kods nav īpaši elastīgs. Piemēram, sarkanā krāsa ir grūti kodēta, un, mainot krāsu, ir jāmaina programma. Iespējams, ka atzīmes vietā vēlēsities arī grafiku.
Šeit ir jauna, uzlabota CheckBox klase. Šis kods parāda, kā veikt dažas no nākamajām darbībām uz VB.NET objektu orientētas programmēšanas virzienā.
Labāka publiskās klases pārbaudeCheckBox mantojumi CheckBox Private CenterSquareColor kā krāsa = krāsa. Zils privātais centrsSquareImage As Bitmap Private CenterSquare As New taisnstūris (3, 4, 10, 12) Aizsargāts ignorē sub OnPaint _ (ByVal pEvent As _ System). Windows. Veidlapas. PaintEventArgs) MyBase. OnPaint (pEvent) Ja es. Pārbauda tad, ja CenterSquareImage nav nekas, tad pEvent. Grafika. FillRectangle (New SolidBrush (CenterSquareColor), CenterSquare) Else pEvent. Grafika. DrawImage (CenterSquareImage, CenterSquare) Beigt, ja beidzas, ja izbeigt Sub Public Public FillColor () kā krāsu Get FillColor = CenterSquareColor End Get Set (ByVal Value as Color) CenterSquareColor = Value End Set End End Īpašuma publiskais īpašums FillImage () As Bitmap Get FillImage = CenterSquareImage End Get Set Set (ByVal Value as Bitmap) CenterSquareImage = Value End Set End End PropertyEnd Klase
Kāpēc ir labāka versija BetterCheckBox
Viens no galvenajiem uzlabojumiem ir divu pievienošana Īpašības. Vecā klase to nedarīja.
Tiek ieviesti divi jauni īpašumi
FillColor
un
FillImage
Lai iegūtu priekšstatu par to, kā tas darbojas VB.NET, izmēģiniet šo vienkāršo eksperimentu. Pievienojiet klasi standarta projektam un pēc tam ievadiet kodu:
Sabiedriskais īpašums, lai ko iegūtu
Pēc nospiešanas Enter nospiežot “Get”, VB.NET Intellisense aizpilda visu īpašuma koda bloku, un viss, kas jums jādara, ir koda specifikācija jūsu projektam. (Get and Set bloki ne vienmēr ir nepieciešami, sākot ar VB.NET 2010, tāpēc, lai to sāktu, jums vismaz ir tik daudz jāpasaka Intellisense.)
Sabiedriskais īpašums, neatkarīgi no tā, kura beigām beidzas, tiek iestatīts (ByVal vērtība) End SetEnd īpašums
Šie bloki ir pabeigti iepriekš norādītajā kodā. Šo koda bloku mērķis ir atļaut piekļuvi īpašuma vērtībām no citām sistēmas daļām.
Ja pievienosit metodes, jums būs labs veids, kā izveidot pilnīgu komponentu. Lai redzētu ļoti vienkāršu metodes piemēru, pievienojiet šo kodu zem īpašuma deklarācijām, kas pieder labākai CheheBox klasei:
Sabiedrība Sub uzsvērt () Me. Fonts = Jauna sistēma. Zīmējums. Fonts (_ "Microsoft Sans Serif", 12.0!, _ Sistēma. Zīmējums. FontStyle. Bold) Me. Izmērs = jauna sistēma. Zīmējums. Izmērs (200, 35) CenterSquare. Ofsets (CenterSquare. Pa kreisi - 3, CenterSquare. Augšā + 3) Beigu apakšdaļa
Papildus rūtiņā parādītā fonta pielāgošanai šī metode arī pielāgo lodziņa izmēru un pārbaudītā taisnstūra atrašanās vietu, lai ņemtu vērā jauno izmēru. Lai izmantotu jauno metodi, vienkārši kodējiet to tāpat kā jebkuru metodi:
MyBetterEmphasizedBox. Uzsvērt()
Un tāpat kā Properties, arī Visual Studio automātiski pievieno jauno metodi Microsoft Intellisense!
Galvenais mērķis šeit ir vienkārši parādīt, kā metode tiek kodēta. Jums var būt zināms, ka standarta CheckBox vadība arī ļauj mainīt fontu, tāpēc šī metode patiešām nepievieno daudz funkciju.
Nākamais šīs sērijas raksts Pielāgotas VB.NET vadības programmēšana - aiz pamatiem! Parāda metodi, kura darbojas, kā arī izskaidro, kā pielāgotajā kontrolē ignorēt metodi.