Vytvorenie kompletných vlastných komponentov môže byť veľmi pokrokovým projektom. Môžete si však vytvoriť triedu VB.NET, ktorá má veľa výhod súčasti nástrojov s oveľa menším úsilím. Tu je návod!
Ak chcete získať chuť na to, čo musíte urobiť, aby ste vytvorili úplný vlastný komponent, vyskúšajte tento experiment:
-> Otvorte nový projekt aplikácie Windows vo VB.NET.
-> Pridajte do formulára začiarkavacie políčko z panela nástrojov.
-> Kliknite na tlačidlo „Zobraziť všetky súbory“ v hornej časti Solution Explorer.
Týmto sa zobrazia súbory, ktoré Visual Studio vytvára pre váš projekt (takže nemusíte). Ako historická poznámka pod čiarou urobil kompilátor VB6 veľa rovnakých vecí, ale nikdy ste k nemu nemali prístup, pretože bol pochovaný v kompilovanom „p-kóde“. Vlastné ovládacie prvky by ste mohli vyvinúť aj vo VB6, bolo to však oveľa ťažšie a vyžadovalo si špeciálny nástroj, ktorý spoločnosť Microsoft dodávala len na tento účel.
Vo forme Designer.vb zistíte, že nižšie uvedený kód bol automaticky pridaný na správne miesta na podporu komponentu CheckBox. (Ak máte inú verziu programu Visual Studio, váš kód sa môže mierne odlišovať.) Toto je kód, ktorý vám Visual Studio zapíše.
'Vyžaduje súkromné komponenty systému Windows Form Designer _ As System. ComponentModel. IContainer'POZNÁMKA: Nasledujúci postup je vyžadovaný pomocou nástroja Windows Form Designer. Môže byť upravený pomocou nástroja Windows Form Designer. „Nemeňte ho pomocou editora kódu._Private Sub InitializeComponent () Me. CheckBox1 = Nový systém. Windows. Formy. CheckBox () Me. SuspendLayout () '' CheckBox1 'Me. CheckBox1.AutoSize = True Me. CheckBox1.Location = Nový systém. Kreslenie. Bod 29, 28) Me. CheckBox1.Name = "CheckBox1".. . a tak ďalej ...
Toto je kód, ktorý musíte pridať do svojho programu, aby ste vytvorili vlastný ovládací prvok. Nezabudnite, že všetky metódy a vlastnosti aktuálneho ovládacieho prvku CheckBox sú v triede dodávanej rozhraním .NET Framework: Systém. Windows. Formy. checkbox. Toto nie je súčasťou vášho projektu, pretože je nainštalovaný v systéme Windows pre všetky programy .NET. Ale existuje veľa z toho.
Ďalším bodom, ktorý treba mať na pamäti, je to, že používate WPF (Windows Presentation Foundation) .NET CheckBox trieda pochádza z úplne inej knižnice s názvom Systém. Windows. riadenie. Tento článok funguje iba pre aplikáciu Windows Forms, ale princípy dedičnosti tu fungujú pre akýkoľvek projekt VB.NET.
Predpokladajme, že váš projekt potrebuje kontrolu, ktorá sa veľmi podobá jednej zo štandardných ovládacích prvkov. Napríklad začiarkavacie políčko, ktoré zmenilo farbu alebo namiesto malej „začiatočnej“ grafiky zobrazilo malú „šťastnú tvár“. Budeme stavať triedu, ktorá to robí a ukážeme vám, ako ju pridať do svojho projektu. Aj keď by to mohlo byť užitočné samo o sebe, skutočným cieľom je demonštrovať VB.NET dedičstvo.
Začnime kódovanie
Ak chcete začať, zmeňte názov začiarkavacieho políčka, do ktorého ste práve pridali oldCheckBox. (Možno budete chcieť prestať znova zobrazovať „Zobraziť všetky súbory“, aby ste zjednodušili Solution Explorer.) Teraz do projektu pridajte novú triedu. Existuje niekoľko spôsobov, ako to urobiť, vrátane kliknutia pravým tlačidlom myši na projekt v aplikácii Solution Explorer a výberom možnosti „Pridať“, potom „Trieda“ alebo výberom položky „Pridať triedu“ pod položkou ponuky Projekt. Zmeňte názov súboru novej triedy na newCheckBox aby veci zostali rovné. Nakoniec otvorte okno s kódom pre triedu a pridajte tento kód:
Verejná trieda newCheckBox dedí CheckBox Private CenterSquareColor As Color = Color. Chránené červene potlačí Sub OnPaint (ByVal pEvent _ As PaintEventArgs) Dim CenterSquare _ As New Rectangle (3, 4, 10, 12) MyBase. OnPaint (pEvent) If Me. Zaškrtnuté Potom pEvent. Grafiky. FillRectangle (New SolidBrush (CenterSquareColor), CenterSquare) End If End SubEnd Class
(V tomto článku a na ďalších stránkach na webe sa používa veľa riadkov, aby boli čiary krátke, aby sa zmestili do priestoru dostupného na webovej stránke.)
Prvá vec, ktorú si všimnete o svojom novom kóde triedy, je Inherits kľúčových slov. To znamená, že všetky vlastnosti a metódy VB.NET Framework CheckBox sú automaticky súčasťou tohto. Aby ste ocenili, koľko práce to ušetrí, musíte vyskúšať programovanie niečoho ako súčasť CheckBoxu od nuly.
Vo vyššie uvedenom kóde si treba všimnúť dve kľúčové veci:
Prvým je použitie kódu Prepis nahradiť štandardné. NET správanie, ktoré by nastalo pre OnPaint event. Udalosť OnPaint sa spustí vždy, keď systém Windows zistí, že časť vášho displeja musí byť rekonštruovaná. Príkladom by mohlo byť, keď by iné okno objavilo časť vašej obrazovky. Systém Windows automaticky aktualizuje obrazovku, ale potom vo vašom kóde vyvolá udalosť OnPaint. (Udalosť OnPaint sa volá aj pri pôvodnom vytvorení formulára.) Ak prepíšeme OnPaint, môžeme zmeniť spôsob, akým veci vyzerajú na obrazovke.
Druhým je spôsob, akým program Visual Basic vytvára CheckBox. Kedykoľvek je rodič označený ako „začiarknuté“ (tj Me. kontrolované je pravdivý), potom nový kód, ktorý poskytneme v našej triede NewCheckBox, bude namiesto vykreslenia začiarknuť stred poľa CheckBox.
Zvyšok sa nazýva Kód GDI +. Tento kód vyberie obdĺžnik s rovnakou veľkosťou ako stred začiarkavacieho políčka a zafarbí ho pomocou volania metód GDI +. Experimentálne sa určili „magické čísla“ na umiestnenie červeného obdĺžnika „Obdĺžnik (3, 4, 10, 12)“. Len som to zmenil, kým to nevyzeralo dobre.
Existuje jeden veľmi dôležitý krok, ktorým sa chcete ubezpečiť, že nevynecháte procedúry prepísania:
MyBase. OnPaint (pEvent)
Prepísanie znamená, že váš kód poskytne všetko kódu udalosti. Ale to je málokedy to, čo chcete. VB teda poskytuje spôsob, ako spustiť normálny .NET kód, ktorý by bol spustený pre udalosť. Toto je vyhlásenie. Ten odovzdá rovnaký parameter - pEvent - do kódu udalosti, ktorý by sa vykonal, ak by nebol prepísaný, MyBase. OnPaint.
Pomocou nového ovládacieho prvku
Pretože naša nová kontrola nie je v našom paneli nástrojov, musí byť vytvorená vo forme s kódom. Najlepšie miesto na to je vo forme Naložiť postup udalosti.
Otvorte okno kódu pre procedúru udalosti načítania formulára a pridajte tento kód:
Private Sub frmCustCtrlEx_Load (odosielateľ ByVal ako systém. Object, ByVal e As System. EventArgs) Zaoberá sa MyBase. Načítať Dim customCheckBox ako nový newCheckBox () S customCheckBox .Text = "Custom CheckBox" .Left = oldCheckBox. Doľava .Top = oldCheckBox. Top + oldCheckBox. Výška. Veľkosť = Nová veľkosť (oldCheckBox. Veľkosť. Width + 50, oldCheckBox. Veľkosť. Výška) Koniec ovládacími prvkami. Pridať (customCheckBox) End Sub
Na umiestnenie nového začiarkavacieho políčka do formulára sme využili skutočnosť, že tam už existuje a práve sme použili jeho veľkosť a polohu (upravené tak, aby sa prispôsobila vlastnosť Text). Inak by sme museli polohu kódovať manuálne. Keď bol MyCheckBox pridaný do formulára, pridáme ho do kolekcie Controls.
Tento kód však nie je príliš flexibilný. Napríklad farba Červená je pevne zakódovaná a zmena farby vyžaduje zmenu programu. Môžete tiež chcieť použiť grafiku namiesto začiarknutia.
Tu je nová vylepšená trieda CheckBox. Tento kód vám ukáže, ako podniknúť niektoré ďalšie kroky smerom k objektovo orientovanému programovaniu VB.NET.
Verejná trieda betterCheckBox zdedí CheckBox Private CenterSquareColor As Color = Color. Blue Private CenterSquareImage As Bitmap Private CenterSquare ako New Rectangle (3, 4, 10, 12) Chránené prepíše Sub OnPaint _ (ByVal pEvent As _ System. Windows. Formy. PaintEventArgs) MyBase. OnPaint (pEvent) If Me. Potom začiarknuté, ak CenterSquareImage nič nevytvára. Grafiky. FillRectangle (New SolidBrush (CenterSquareColor), CenterSquare) Elite pEvent. Grafiky. DrawImage (CenterSquareImage, CenterSquare) End If End If End Sub Verejné vlastníctvo FillColor () As Color Get FillColor = CenterSquareColor End Get Set (hodnota ByVal ako farba) CenterSquareColor = Hodnota konca sady koncových vlastností Verejné vlastníctvo FillImage () pri získaní bitmapy FillImage = CenterSquareImage sady koncových nastavení (hodnota ByVal ako bitmapy) CenterSquareImage = Hodnota konca sady koncových vlastnostíEnd Trieda
Prečo je verzia BetterCheckBox lepšia
Jedným z hlavných zlepšení je pridanie dvoch vlastnosti. To je niečo, čo stará trieda vôbec neurobila.
Zaviedli sa dve nové vlastnosti
FillColor
a
FillImage
Ak chcete zistiť, ako to funguje vo VB.NET, vyskúšajte tento jednoduchý experiment. Pridajte triedu do štandardného projektu a potom zadajte kód:
Verejné vlastníctvo Čokoľvek dostanete
Keď stlačíte Enter po napísaní „Získať“, VB.NET Intellisense vyplní celý blok kódu vlastníctva a všetko, čo musíte urobiť, je kódovať špecifiká pre váš projekt. (Bloky Get and Set sa nemusia vždy začínať od VB.NET 2010, takže musíte to Intellisense prinajmenšom povedať, aby ste ho mohli spustiť.)
Verejné vlastníctvo Bez ohľadu na to, kde dostanete nastavenie konca (hodnota ByVal) Koniec nastavenia ako vlastníctvo
Tieto bloky boli dokončené vo vyššie uvedenom kóde. Účelom týchto blokov kódu je umožniť prístup k hodnotám vlastností z iných častí systému.
S pridaním metód by ste boli na dobrej ceste k vytvoreniu kompletného komponentu. Ak chcete vidieť veľmi jednoduchý príklad metódy, pridajte tento kód pod vyhlásenia o vlastnostiach v triede betterCheckBox:
Verejné podčiarknutie () Me. Font = Nový systém. Kreslenie. Písmo (_ „Microsoft Sans Serif“, 12.0!, _ Systém. Kreslenie. Štýl písma. Bold) Me. Veľkosť = nový systém. Kreslenie. Veľkosť (200, 35) CenterSquare. Ofset (CenterSquare. Vľavo - 3, CenterSquare. Hore + 3) Koniec sub
Okrem úpravy písma zobrazeného v zaškrtávacom políčku táto metóda upravuje aj veľkosť políčka a umiestnenie začiarknutého obdĺžnika tak, aby zodpovedala novej veľkosti. Ak chcete použiť novú metódu, stačí ju kódovať rovnakým spôsobom ako pri akejkoľvek inej metóde:
MyBetterEmphasizedBox. Zdôrazniť ()
A rovnako ako vlastnosti, Visual Studio automaticky pridá novú metódu do programu Intellisense spoločnosti Microsoft!
Hlavným cieľom je jednoducho demonštrovať, ako je metóda kódovaná. Možno si uvedomujete, že štandardný ovládací prvok CheckBox tiež umožňuje zmenu písma, takže táto metóda v skutočnosti nepridáva veľa funkcií.
Nasledujúci článok v tejto sérii Programovanie vlastného ovládania VB.NET - Beyond the Basics! Ukazuje metódu, ktorá funguje, a tiež vysvetľuje, ako prepísať metódu vo vlastnom ovládacom prvku.