En introduktion till programmering av en VB.NET-kontroll med arv

Att bygga kompletta anpassade komponenter kan vara ett mycket avancerat projekt. Men du kan bygga en VB.NET-klass som har många av fördelarna med en verktygslådekomponent med mycket mindre ansträngning. Här är hur!

För att få en smak av vad du behöver göra för att skapa en komplett anpassad komponent, prova detta experiment:

-> Öppna ett nytt Windows-applikationsprojekt i VB.NET.
-> Lägg till en checkbox från verktygslådan i formuläret.
-> Klicka på knappen "Visa alla filer" längst upp i Solution Explorer.

Detta visar filerna som Visual Studio skapar för ditt projekt (så du behöver inte). Som en historisk fotnot gjorde VB6-kompilatorn mycket av samma saker, men du kunde aldrig få åtkomst till koden eftersom den begravdes i kompilerad "p-kod". Du kan också utveckla anpassade kontroller i VB6, men det var mycket svårare och krävde ett specialverktyg som Microsoft levererade just för detta ändamål.

I formuläret Designer.vb fil, kommer du att upptäcka att koden nedan har lagts till automatiskt på rätt platser för att stödja CheckBox-komponenten. (Om du har en annan version av Visual Studio kan din kod vara något annorlunda.) Det här är koden som Visual Studio skriver för dig.

"Krävs av Windows Form Designer Privata komponenter _ Som System.ComponentModel.IContainer'NOTE: Följande procedur krävs" genom att Windows Form Designer "Det kan ändras med Windows Form Designer." Ändra inte det med kodredigeraren . _Private Sub InitializeComponent () Me.CheckBox1 = Nytt system.Windows.Forms.CheckBox () Me.SuspendLayout () "CheckBox1 'Me.CheckBox1.AutoSize = True Me.CheckBox1.Location = Nytt system.Drawing.Point (29, 28 ) Me.CheckBox1.Name = "CheckBox1" ... och så vidare ... 

Det här är koden som du måste lägga till i ditt program för att skapa en anpassad kontroll. Tänk på att alla metoder och egenskaper för den faktiska CheckBox-kontrollen är i en klass som tillhandahålls av .NET Framework: System.Windows.Forms.CheckBox. Detta är inte en del av ditt projekt eftersom det är installerat i Windows för alla .NET-program. Men det finns en massa av det.

En annan punkt att vara medveten om är att om du använder WPF (Windows Presentation Foundation) kommer klassen .NET CheckBox från ett helt annat bibliotek med namnet System.Windows.Controls. Den här artikeln fungerar bara för en Windows Forms-applikation, men arvets huvudmän här fungerar för alla VB.NET-projekt.

Anta att ditt projekt behöver en kontroll som liknar en av standardkontrollerna. Till exempel en kryssruta som ändrade färg eller visade ett litet "lyckligt ansikte" istället för att visa den lilla "check" -grafiken. Vi kommer att bygga en klass som gör detta och visa dig hur du lägger till det i ditt projekt. Även om detta kan vara användbart i sig, är det verkliga målet att demonstrera VB.NET: s arv.

Låt oss börja kodning

För att komma igång, ändra namnet på CheckBox som du just har lagt till oldCheckBox. (Du kanske vill sluta visa "Visa alla filer" igen för att förenkla Solution Explorer.) Lägg nu till en ny klass i ditt projekt. Det finns flera sätt att göra detta, inklusive högerklicka på projektet i Solution Explorer och välja "Lägg till" och sedan "Klass" eller välja "Lägg till klass" under under menyposten Projekt. Ändra filnamnet för den nya klassen till newCheckBox att hålla saker raka. Slutligen öppnar du kodfönstret för klassen och lägger till den här koden:

Public Class newCheckBox Inherits CheckBox Private CenterSquareColor As Color = Color.Red Protected Overrides Sub OnPaint (ByVal pEvent _ As PaintEventArgs) Dim CenterSquare _ Som ny rektangel (3, 4, 10, 12) MyBase.OnPaint (pEvent) If Me.Checked Then pEvent.Graphics.FillRectangle (New SolidBrush (CenterSquareColor), CenterSquare) End If End SubEnd Class

(I den här artikeln och i andra på webbplatsen används många linjefortsättningar för att hålla linjerna korta så att de passar in i utrymmet som finns tillgängligt på webbsidan.)

Det första du märker om din nya klasskod är ärver nyckelord. Det betyder att alla egenskaper och metoder för en VB.NET Framework CheckBox automatiskt ingår i den här. För att uppskatta hur mycket arbete detta sparar måste du försöka programmera något som en CheckBox-komponent från grunden.

Det finns två viktiga saker att märka i koden ovan:

Den första är koden som används Åsidosätta att ersätta standard .NET-beteende som skulle äga rum för en OnPaint händelse. En OnPaint-händelse utlöses när Windows märker att en del av din skärm måste rekonstrueras. Ett exempel skulle vara när ett annat fönster avslöjar en del av din skärm. Windows uppdaterar skärmen automatiskt, men ringer sedan OnPaint-händelsen i din kod. (OnPaint-händelsen kallas också när formen ursprungligen skapades.) Så om vi åsidosätter OnPaint kan vi ändra hur saker ser ut på skärmen.

Det andra är hur Visual Basic skapar CheckBox. När föräldern är "Kontrollerad" (det vill säga, Me.Checked är Sann) då kommer den nya koden som vi tillhandahåller i vår klass NewCheckBox att färga upp mitt i CheckBox istället för att rita ett bock.