Een inleiding tot het programmeren van een VB.NET-besturing met overerving

Het bouwen van complete componenten op maat kan een zeer geavanceerd project zijn. Maar u kunt met veel minder moeite een VB.NET-klasse bouwen die veel van de voordelen van een toolbox-component heeft. Hier is hoe!

Probeer dit experiment om een ​​idee te krijgen van wat u moet doen om een ​​volledig aangepast onderdeel te maken:

-> Open een nieuw Windows Application-project in VB.NET.
-> Voeg een CheckBox uit de Toolbox toe aan het formulier.
-> Klik op de knop "Alle bestanden weergeven" bovenaan in Solution Explorer.

Hiermee worden de bestanden weergegeven die Visual Studio voor uw project maakt (zodat u dit niet hoeft te doen). Als historische voetnoot deed de VB6-compiler veel dezelfde dingen, maar je kon nooit toegang krijgen tot de code omdat deze begraven lag in de gecompileerde "p-code". U kunt ook aangepaste bedieningselementen in VB6 ontwikkelen, maar het was een stuk moeilijker en vereiste een speciaal hulpprogramma dat Microsoft speciaal voor dat doel leverde.

In het formulier Designer.vb bestand, zult u zien dat de onderstaande code automatisch op de juiste locaties is toegevoegd om het CheckBox-onderdeel te ondersteunen. (Als u een andere versie van Visual Studio hebt, kan uw code enigszins afwijken.) Dit is de code die Visual Studio voor u schrijft.

'Vereist door de Windows Form Designer Privé-componenten _ Als System.ComponentModel.IContainer'OPMERKING: de volgende procedure is vereist' door de Windows Form Designer'Het kan worden gewijzigd met de Windows Form Designer''Niet wijzigen met de code-editor . _Private Sub InitializeComponent () Me.CheckBox1 = Nieuw System.Windows.Forms.CheckBox () Me.SuspendLayout () "CheckBox1 'Me.CheckBox1.AutoSize = True Me.CheckBox1.Location = New System.Drawing.Point (29, 28 ) Me.CheckBox1.Name = "CheckBox1" ... enzovoort ... 

Dit is de code die u aan uw programma moet toevoegen om een ​​aangepast besturingselement te maken. Houd er rekening mee dat alle methoden en eigenschappen van het daadwerkelijke CheckBox-besturingselement zich in een klasse bevinden die wordt geleverd door .NET Framework: System.Windows.Forms.CheckBox. Dit maakt geen deel uit van uw project omdat het in Windows is geïnstalleerd voor alle .NET-programma's. Maar er is een lot ervan.

Een ander punt om op te letten, is dat als u WPF (Windows Presentation Foundation) gebruikt, de .NET CheckBox-klasse uit een geheel andere bibliotheek komt met de naam System.Windows.Controls. Dit artikel werkt alleen voor een Windows Forms-toepassing, maar de principes van overerving werken hier voor elk VB.NET-project.

Stel dat uw project een besturingselement nodig heeft dat erg veel op een van de standaardbesturingselementen lijkt. Bijvoorbeeld een selectievakje dat van kleur is veranderd of een klein "blij gezicht" heeft weergegeven in plaats van het kleine "vinkje" weer te geven. We gaan een klasse bouwen die dit doet en je laten zien hoe je deze aan je project kunt toevoegen. Hoewel dit op zichzelf nuttig kan zijn, is het echte doel om VB.NET's te demonstreren erfenis.

Laten we beginnen met coderen

Wijzig eerst de naam van de CheckBox waaraan u zojuist hebt toegevoegd oldCheckBox. (Misschien wilt u stoppen met het weergeven van "Alle bestanden weergeven" om Solution Explorer te vereenvoudigen.) Voeg nu een nieuwe klasse toe aan uw project. Er zijn verschillende manieren om dit te doen, waaronder met de rechtermuisknop op het project klikken in Solution Explorer en "Toevoegen" en vervolgens "Klasse" selecteren of "Klasse toevoegen" selecteren onder het menu-item Project. Wijzig de bestandsnaam van de nieuwe klasse in newCheckBox om dingen recht te houden. Open ten slotte het codevenster voor de klas en voeg deze code toe:

Public Class newCheckBox neemt CheckBox over Private CenterSquareColor As Color = Color.Red Beschermde overschrijvingen Sub OnPaint (ByVal pEvent _ As PaintEventArgs) Dim CenterSquare _ As New Rectangle (3, 4, 10, 12) MyBase.OnPaint (pEvent) If Me.Checked pEvent.Graphics.FillRectangle (New SolidBrush (CenterSquareColor), CenterSquare) End If End SubEnd Class

(In dit artikel en op andere plaatsen op de site worden veel lijnonderbrekingen gebruikt om lijnen kort te houden, zodat ze in de beschikbare ruimte op de webpagina passen.)

Het eerste dat opvalt aan uw nieuwe klassecode is de erft trefwoord. Dat betekent dat alle eigenschappen en methoden van een VB.NET Framework CheckBox automatisch deel uitmaken van deze. Om te waarderen hoeveel werk dit bespaart, moet u hebben geprobeerd zoiets als een CheckBox-component helemaal opnieuw te programmeren.

Er zijn twee belangrijke dingen om op te merken in de bovenstaande code:

De eerste is de code die wordt gebruikt override om het standaard .NET-gedrag te vervangen dat zou plaatsvinden voor een OnPaint evenement. Een OnPaint-gebeurtenis wordt geactiveerd wanneer Windows merkt dat een deel van uw beeldscherm moet worden gereconstrueerd. Een voorbeeld zou zijn wanneer een ander venster een deel van uw weergave onthult. Windows werkt het display automatisch bij, maar roept vervolgens de OnPaint-gebeurtenis in uw code aan. (De gebeurtenis OnPaint wordt ook genoemd wanneer het formulier voor het eerst wordt gemaakt.) Dus als we OnPaint opheffen, kunnen we de manier wijzigen waarop dingen op het scherm worden weergegeven.

De tweede is de manier waarop Visual Basic de CheckBox maakt. Wanneer de ouder "Gecontroleerd" is (dat wil zeggen, Me.Checked is waar) dan zal de nieuwe code die we in onze NewCheckBox-klasse bieden, het midden van de CheckBox opnieuw kleuren in plaats van een vinkje te plaatsen.