Osztály programozása egyéni VB.NET vezérlő létrehozásához

A teljes egyedi összetevők építése nagyon fejlett projekt lehet. Felépíthet egy VB.NET osztályt, amely sokkal kevesebb erőfeszítéssel rendelkezik az eszközkészlet sok előnyeivel. Itt van, hogyan!

Ha meg szeretné tudni, hogy mit kell tennie a teljes egyedi összetevő létrehozásához, próbálja ki ezt a kísérletet:

-> Nyisson meg egy új Windows Application projektet a VB.NET-ben.
-> Adjon hozzá egy jelölőnégyzetet az Eszköztárból az űrlaphoz.
-> Kattintson az "Összes fájl megjelenítése" gombra a tetején Megoldás kereső.

Megjeleníti azokat a fájlokat, amelyeket a Visual Studio létrehoz a projekt számára (így nem kell). Mint történelmi lábjegyzetet, a VB6 fordító ugyanazokat a dolgokat tette, de soha nem férhetett hozzá a kódhoz, mert a fordított "p-kódba" temették el. Az egyedi vezérlőket a VB6-ban is kifejlesztette, de ez sokkal nehezebb volt, és speciális segédprogramra volt szükség, amelyet a Microsoft éppen ehhez a célhoz szállított.

Formájában Designer.vb fájlt, rájössz, hogy az alábbi kódot automatikusan hozzáadta a megfelelő helyekre a CheckBox összetevő támogatásához. (Ha a Visual Studio más verziója van, akkor a kód kissé eltérhet.) Ezt a kódot írja a Visual Studio az Ön számára.

instagram viewer

"A Windows Form Designer magánkomponensei által megkövetelt _ mint rendszer. ComponentModel. IContainer'MEGJEGYZÉS: A következő eljárásra van szükség a Windows űrlaptervezőnél'A Windows űrlaptervezővel módosítható.'Nem módosíthatja a kódszerkesztővel. _Private Sub InitializeComponent () Me. CheckBox1 = Új rendszer. Ablakok. Formákat. CheckBox () Me. SuspendLayout () '' CheckBox1 'Me. CheckBox1.AutoSize = Igaz. CheckBox1.Location = Új rendszer. Rajz. (29, 28) pont. CheckBox1.Name = "CheckBox1".. . és így tovább ...

Ezt a kódot kell hozzáadnia a programhoz az egyedi vezérlő létrehozásához. Ne feledje, hogy a tényleges CheckBox vezérlés összes módszere és tulajdonsága a .NET-keretrendszer által biztosított osztályba tartozik: Rendszer. Ablakok. Formákat. CheckBox. Ez nem része a projektnek, mert az összes .NET programhoz telepítve van a Windows rendszerbe. De van egy sok belőle.

Egy másik szempont, amelyet tudnia kell, hogy ha használ WPF (Windows Presentation Foundation), a .NET CheckBox osztály egy teljesen más könyvtárból származik Rendszer. Ablakok. Controls. Ez a cikk csak a Windows Forms alkalmazásokra működik, de az öröklési alapelvek minden VB.NET projektnél működnek.

Tegyük fel, hogy a projektnek olyan vezérlésre van szüksége, amely nagyon hasonlít az egyik szokásos vezérléshez. Például egy jelölőnégyzet, amely megváltoztatta a színt, vagy egy apró „boldog arcot” jelenített meg, ahelyett, hogy a kis „ellenőrző” grafikát jelenítené meg. Építünk egy osztályt, amely ezt megteszi, és megmutatjuk, hogyan kell hozzátenni a projekthez. Noha ez önmagában hasznos lehet, az igazi cél a VB.NET bemutatása öröklés.

Kezdjük a kódolást

Az induláshoz változtassa meg az éppen hozzáadott jelölőnégyzet nevét oldCheckBox. (A Solution Explorer egyszerűsítése érdekében érdemes lehet abbahagyni az "Összes fájl megjelenítése" lehetőséget.) Most adjon hozzá egy új osztályt a projekthez. Számos módja van ennek, például a jobb egérgombbal kattintson a projektre a Solution Explorerben, és válassza a „Hozzáadás”, majd az „Osztály” lehetőséget, vagy válassza a Projekt menüpont alatt az „Osztály hozzáadása” lehetőséget. Változtassa meg az új osztály fájlnevét newCheckBox hogy egyenesen tartsuk a dolgokat. Végül nyissa meg az osztály kódablakát és adja hozzá ezt a kódot:

Nyilvános osztály newCheckBox örökösíti a CheckBox Private CenterSquareColor mint szín = szín. Piros védett felülbírálja a Sub OnPaint (ByVal pEvent _ mint PaintEventArgs) Dim CenterSquare _ Új téglalapként (3, 4, 10, 12) MyBase. OnPaint (pEvent) Ha én. Ellenőrizve, majd pEvent. Grafika. FillRectangle (Új SolidBrush (CenterSquareColor), CenterSquare) End EndE End End vége vége

(Ebben a cikkben és a webhely többi részében sok sor folytatódik arra, hogy a sorokat rövidre tartsák, hogy azok beleférjenek a weboldalon rendelkezésre álló helybe.)

Az első dolog, amit észrevesz az új osztálykóddal kapcsolatban, a Inherits kulcsszó. Ez azt jelenti, hogy a VB.NET Framework CheckBox összes tulajdonsága és módszere automatikusan ennek része. Annak felmérése érdekében, hogy mennyi munkát takarít meg, meg kell próbálnia valami hasonlót, mint például a CheckBox összetevő programozása a semmiből.

Két fő dolgot kell észrevenni a fenti kódban:

Az első a használt kód felülírása helyettesíteni a szokásos .NET viselkedést, amely az OnPaint esemény. OnPaint esemény aktiválódik, amikor a Windows észreveszi, hogy a képernyő egy részét rekonstruálni kell. Erre példa lehet, amikor egy másik ablak fedezi fel a képernyő részét. A Windows automatikusan frissíti a képernyőt, de ezután meghívja az OnPaint eseményt a kódjában. (Az OnPaint esemény akkor is meghívásra kerül, amikor az űrlapot eredetileg létrehozták.) Tehát, ha felülbíráljuk az OnPaint alkalmazást, megváltoztathatjuk a dolgok megjelenését a képernyőn.

A második az, ahogyan a Visual Basic létrehozza a jelölőnégyzetet. Amikor a szülő "ellenőrzött" (vagyis Nekem. kockás jelentése Igaz), akkor az új kód, amelyet a NewCheckBox osztályban adunk meg, a CheckBox közepét újrafesti, ahelyett, hogy pipa lenne.

A többi az úgynevezett GDI + kód. Ez a kód egy téglalapot választ ki, pontosan ugyanolyan méretű, mint a jelölőnégyzet közepe, és színezi azt a GDI + módszerhívásokkal. A "mágikus számokat" a piros téglalap elhelyezéséhez, "Téglalap (3, 4, 10, 12)" kísérletileg határoztuk meg. Csak megváltoztattam, amíg jól nem nézett ki.

Van egy nagyon fontos lépés, amelyet meg szeretne győződni arról, hogy ne hagyja ki a felülbírálási eljárásokat:

MyBase. OnPaint (pEvent)

Felülírás azt jelenti, hogy a kód biztosítja összes az esemény kódja. De ezt ritkán akarod. A VB tehát lehetővé teszi a normál .NET-kód futtatását, amelyet egy eseményre végrehajtottak volna. Ez az állítás teszi ezt. Ugyanazt a paramétert - pEvent - továbbítja az eseménykódra, amelyet akkor futtattak volna, ha nem lett volna felülbírálva, a MyBase. OnPaint.

Az új vezérlő használata

Mivel új vezérlőnk nincs az eszközkészletünkben, azt kóddal formájában kell létrehozni. A legjobb hely erre az forma Betöltés esemény eljárás.

Nyissa meg az űrlaptöltési esemény eljárás kódablakát, és adja hozzá a következő kódot:

Privát Sub frmCustCtrlEx_Load (ByVal feladó mint rendszer. Objektum, ByVal e As System. EventArgs) kezeli a MyBase-t. Töltse be a customCheckBox mint új elemet newCheckBox () az customCheckBox segítségével .Text = "Custom CheckBox" .Left = oldCheckBox. Balra .Top = oldCheckBox. Top + oldCheckBox. Magasság .Méret = Új méret (oldCheckBox. Méret. Szélesség + 50, oldCheckBox. Méret. Magasság) Vége a vezérlőkkel. Add (customCheckBox) End Sub

Az új jelölőnégyzet beillesztésére az űrlapra kihasználtuk azt a tényt, hogy már létezik ilyen, és csak az adott méretét és helyzetét használtuk (úgy beállítva, hogy a Szöveg tulajdonság illeszkedjen). Ellenkező esetben manuálisan kell kódolni a helyzetet. Amikor a MyCheckBox hozzáadódott az űrlaphoz, akkor azt hozzáadjuk a Vezérlők gyűjteményhez.

De ez a kód nem túl rugalmas. Például a piros szín merev kódolású, és a szín megváltoztatásához meg kell változtatni a programot. Érdemes lehet egy pipa helyett egy grafikát is.

Itt van egy új, továbbfejlesztett CheckBox osztály. Ez a kód megmutatja, hogyan kell megtenni a következő lépéseket a VB.NET objektumorientált programozás felé.

A nyilvános osztály betterCheckBox öröklései CheckBox Private CenterSquareColor mint szín = szín. Kék Private CenterSquareImage As Bitmap Private CenterSquare As New Téglalap (3, 4, 10, 12) Védett felülírja az On OnPaint _ (ByVal pEvent As _ System) elemet. Ablakok. Formákat. PaintEventArgs) MyBase. OnPaint (pEvent) Ha én. Ekkor ellenőrizve, ha a CenterSquareImage nincs semmi, akkor pEvent. Grafika. FillRectangle (Új SolidBrush (CenterSquareColor), CenterSquare) Else pEvent. Grafika. DrawImage (CenterSquareImage, CenterSquare) Vége, ha befejeződik, ha vége A köztulajdon megszűnése FillColor () színként Get FillColor = CenterSquareColor End Beállítása (ByVal érték színként) CenterSquareColor = Érték End End Set End tulajdonság köztulajdon FillImage () Bitmapként Get FillImage = CenterSquareImage End Set Set (ByVal érték bitmapként) CenterSquareImage = Érték End End Set End PropertyEnd Osztály

Miért jobb a BetterCheckBox verzió?

Az egyik fő fejlesztés kettő hozzáadása Tulajdonságok. A régi osztály ezt egyáltalán nem tette.

A bevezetett két új tulajdonság a következő:

Kitöltőszín

és

FillImage

Ha meg szeretné tudni, hogy ez hogyan működik a VB.NET-ben, próbálja ki ezt az egyszerű kísérletet. Adjon hozzá egy osztályt egy standard projekthez, majd írja be a kódot:

Köztulajdon, bármit is kaphat

Amikor megnyomja az Enter billentyűt a „Get” beírása után, a VB.NET Intellisense kitölti a teljes tulajdonságkód blokkot, és csak annyit kell tennie, hogy kódolja a projekt specifikációit. (A Get and Set blokkokhoz nem mindig szükséges a VB.NET 2010 programmal kezdődni, ezért el kell indítanod legalább az Intellisense-t.)

A köztulajdon bármilyen módon befejeződik (BeVal érték) Az End SetEnd tulajdonság

Ezeket a blokkokat a fenti kód kitöltötte. Ezen kódblokkok célja, hogy lehetővé tegyék a tulajdonságértékek elérését a rendszer más részeiből.

A módszerek hozzáadásával jó úton haladhat a teljes összetevő létrehozásában. A módszer nagyon egyszerű példájának megtekintéséhez adja hozzá ezt a kódot a betterCheckBox osztály tulajdonságnyilatkozatainak alá:

Nyilvános kiemelés () Me. Betűtípus = Új rendszer. Rajz. Betűtípus (_ "Microsoft Sans Serif", 12.0!, _ Rendszer. Rajz. Betű stílus. Bold) Me. Méret = új rendszer. Rajz. Méret (200, 35) CenterSquare. Offset (CenterSquare. Balra - 3, CenterSquare. Felül + 3) Vége al

A csekkfüzetben megjelenő betűkészlet beállításán túl ez a módszer a doboz méretét és az ellenőrzött téglalap helyét is beállítja az új méret figyelembevétele érdekében. Az új módszer használatához csak úgy kell kódolnia, mint bármelyik módszert:

MyBetterEmphasizedBox. Hangsúlyt helyez()

És a Tulajdonságokhoz hasonlóan a Visual Studio automatikusan hozzáadja az új módszert a Microsoft Intellisense-hez!

A fő cél itt az, hogy egyszerűen bemutassuk egy módszer kódolását. Lehet, hogy tisztában van azzal, hogy a szokásos CheckBox vezérlőegység lehetővé teszi a betűkészlet megváltoztatását is, tehát ez a módszer nem ad sok funkciót.

A sorozat következő cikke, Az egyéni VB.NET-vezérlés programozása - Az alapokon túl! Című cikk bemutatja a működő módszert, és elmagyarázza, hogyan lehet felülbírálni egy módszert az egyedi vezérlésnél.

instagram story viewer