Programmation d'une classe pour créer un contrôle VB.NET personnalisé

click fraud protection

La construction de composants personnalisés complets peut être un projet très avancé. Mais vous pouvez créer une classe VB.NET qui présente de nombreux avantages d'un composant de boîte à outils avec beaucoup moins d'efforts. Voici comment!

Pour avoir une idée de ce que vous devez faire pour créer un composant personnalisé complet, essayez cette expérience:

-> Ouvrez un nouveau projet d'application Windows dans VB.NET.
-> Ajoutez une CheckBox de la boîte à outils au formulaire.
-> Cliquez sur le bouton "Afficher tous les fichiers" en haut de Explorateur de solution.

Cela affichera les fichiers que Visual Studio crée pour votre projet (vous n'avez donc pas à le faire). En tant que note de bas de page historique, le compilateur VB6 a fait beaucoup des mêmes choses, mais vous n'avez jamais pu accéder au code car il était enterré dans un "code p" compilé. Vous pouvez également développer des contrôles personnalisés dans VB6, mais c'était beaucoup plus difficile et nécessitait un utilitaire spécial que Microsoft fournissait juste à cet effet.

instagram viewer

Sous la forme Designer.vb, vous constaterez que le code ci-dessous a été ajouté automatiquement aux bons emplacements pour prendre en charge le composant CheckBox. (Si vous disposez d'une version différente de Visual Studio, votre code peut être légèrement différent.) Il s'agit du code que Visual Studio écrit pour vous.

'Requis par les composants privés de Windows Form Designer _ en tant que système. ComponentModel. IContainer'NOTE: La procédure suivante est requise'par le Concepteur de formulaires Windows'Il peut être modifié à l'aide du Concepteur de formulaires Windows.'Ne le modifiez pas à l'aide de l'éditeur de code. _Private Sub InitializeComponent () Me. CheckBox1 = Nouveau système. Les fenêtres. Formes. CheckBox () Moi. SuspendLayout () '' CheckBox1 'Moi. CheckBox1.AutoSize = True Me. CheckBox1.Location = Nouveau système. Dessin. Point (29, 28) Moi. CheckBox1.Name = "CheckBox1".. . et ainsi de suite ...

Il s'agit du code que vous devez ajouter à votre programme pour créer un contrôle personnalisé. Gardez à l'esprit que toutes les méthodes et propriétés du contrôle CheckBox réel se trouvent dans une classe fournie par le .NET Framework: Système. Les fenêtres. Formes. CheckBox. Cela ne fait pas partie de votre projet car il est installé dans Windows pour tous les programmes .NET. Mais il y a un lot de celui-ci.

Un autre point à prendre en compte est que si vous utilisez WPF (Windows Presentation Foundation), la classe .NET CheckBox provient d'une bibliothèque complètement différente nommée Système. Les fenêtres. Contrôles. Cet article ne fonctionne que pour une application Windows Forms, mais les principes d'héritage ici fonctionnent pour tout projet VB.NET.

Supposons que votre projet ait besoin d'un contrôle qui ressemble beaucoup à l'un des contrôles standard. Par exemple, une case à cocher qui a changé de couleur ou affiché un minuscule "visage heureux" au lieu d'afficher le petit graphique "check". Nous allons créer une classe qui fait cela et vous montrer comment l'ajouter à votre projet. Bien que cela puisse être utile en soi, le véritable objectif est de démontrer VB.NET héritage.

Commençons le codage

Pour commencer, changez le nom de la CheckBox que vous venez d'ajouter à oldCheckBox. (Vous souhaiterez peut-être arrêter d'afficher à nouveau "Afficher tous les fichiers" pour simplifier l'Explorateur de solutions.) Ajoutez maintenant une nouvelle classe à votre projet. Il existe plusieurs façons de procéder, notamment en cliquant avec le bouton droit sur le projet dans l'Explorateur de solutions et en sélectionnant "Ajouter" puis "Classe" ou en sélectionnant "Ajouter une classe" sous l'élément de menu Projet. Remplacez le nom de fichier de la nouvelle classe par newCheckBox pour garder les choses droites. Enfin, ouvrez la fenêtre de code pour la classe et ajoutez ce code:

Classe publique newCheckBox Inherits CheckBox Private CenterSquareColor As Color = Color. Red Protected Overrides Sub OnPaint (ByVal pEvent _ As PaintEventArgs) Dim CenterSquare _ As New Rectangle (3, 4, 10, 12) MyBase. OnPaint (pEvent) Si moi. Vérifié puis pEvent. Graphique. FillRectangle (New SolidBrush (CenterSquareColor), CenterSquare) End If End SubEnd Classe

(Dans cet article et dans d'autres sur le site, de nombreuses continuations de lignes sont utilisées pour garder les lignes courtes afin qu'elles s'insèrent dans l'espace disponible sur la page Web.)

La première chose à noter à propos de votre nouveau code de classe est le Hérite mot-clé. Cela signifie que toutes les propriétés et méthodes d'un CheckBox VB.NET Framework font automatiquement partie de celui-ci. Pour apprécier le travail économisé, vous devez avoir essayé de programmer quelque chose comme un composant CheckBox à partir de zéro.

Il y a deux éléments clés à noter dans le code ci-dessus:

Le premier est le code utilise Passer outre pour remplacer le comportement .NET standard qui aurait lieu pour un OnPaint un événement. Un événement OnPaint est déclenché chaque fois que Windows remarque qu'une partie de votre affichage doit être reconstruite. Un exemple serait lorsqu'une autre fenêtre découvre une partie de votre affichage. Windows met automatiquement à jour l'affichage, mais appelle ensuite l'événement OnPaint dans votre code. (L'événement OnPaint est également appelé lors de la création initiale du formulaire.) Donc, si nous remplaçons OnPaint, nous pouvons changer l'apparence des choses à l'écran.

La seconde est la façon dont Visual Basic crée le CheckBox. Chaque fois que le parent est «vérifié» (c'est-à-dire, Moi. Vérifié est Vrai), le nouveau code que nous fournissons dans notre classe NewCheckBox recolorera le centre de la CheckBox au lieu de dessiner une coche.

Le reste est ce qu'on appelle Code GDI +. Ce code sélectionne un rectangle de la même taille exacte que le centre d'une case à cocher et le colore avec les appels de méthode GDI +. Les "nombres magiques" pour positionner le rectangle rouge, "Rectangle (3, 4, 10, 12)", ont été déterminés expérimentalement. Je l'ai juste changé jusqu'à ce qu'il paraisse bien.

Il y a une étape très importante que vous voulez vous assurer de ne pas ignorer les procédures de remplacement:

MyBase. OnPaint (pEvent)

Le remplacement signifie que votre code fournira tout du code de l'événement. Mais c'est rarement ce que vous voulez. VB fournit donc un moyen d'exécuter le code .NET normal qui aurait été exécuté pour un événement. C'est la déclaration qui fait cela. Il transmet le même paramètre, pEvent, au code d'événement qui aurait été exécuté s'il n'avait pas été remplacé, MyBase. OnPaint.

Utilisation du nouveau contrôle

Parce que notre nouveau contrôle n'est pas dans notre boîte à outils, il doit être créé dans le formulaire avec du code. Le meilleur endroit pour le faire est sous la forme Charge procédure événementielle.

Ouvrez la fenêtre de code pour la procédure événementielle de chargement de formulaire et ajoutez ce code:

Private Sub frmCustCtrlEx_Load (expéditeur ByVal en tant que système. Objet, ByVal e As System. EventArgs) Gère MyBase. Charger Dim customCheckBox comme nouveau newCheckBox () Avec customCheckBox .Text = "Custom CheckBox" .Left = oldCheckBox. Gauche .Top = oldCheckBox. Top + oldCheckBox. Height .Size = New Size (oldCheckBox. Taille. Largeur + 50, ancienne CheckBox. Taille. Hauteur) Fin avec commandes. Ajouter (customCheckBox) End Sub

Pour placer la nouvelle case à cocher sur le formulaire, nous avons profité du fait qu'il y en a déjà un et nous avons juste utilisé la taille et la position de celui-ci (ajusté pour que la propriété Text s'adapte). Sinon, il faudrait coder la position manuellement. Lorsque MyCheckBox a été ajouté au formulaire, nous l'ajoutons ensuite à la collection Controls.

Mais ce code n'est pas très flexible. Par exemple, la couleur Rouge est codée en dur et changer la couleur nécessite de changer le programme. Vous pouvez également souhaiter un graphique au lieu d'une coche.

Voici une nouvelle classe CheckBox améliorée. Ce code vous montre comment effectuer certaines des étapes suivantes vers la programmation orientée objet VB.NET.

La classe publique betterCheckBox hérite de CheckBox Private CenterSquareColor As Color = Color. Blue Private CenterSquareImage As Bitmap Private CenterSquare As New Rectangle (3, 4, 10, 12) Protected Overrides Sub OnPaint _ (ByVal pEvent As _ System. Les fenêtres. Formes. PaintEventArgs) MyBase. OnPaint (pEvent) Si moi. Vérifié alors si CenterSquareImage n'est rien alors pEvent. Graphique. FillRectangle (New SolidBrush (CenterSquareColor), CenterSquare) Sinon pEvent. Graphique. DrawImage (CenterSquareImage, CenterSquare) End If End If End Sub Propriété publique FillColor () As Color Get FillColor = CenterSquareColor End Get Set (ByVal Value As Color) CenterSquareColor = Value End Set End Property Propriété publique FillImage () As Bitmap Get FillImage = CenterSquareImage End Get Set (ByVal Value As Bitmap) CenterSquareImage = Value End Set End PropertyEnd Classe

Pourquoi la version BetterCheckBox est meilleure

L'une des principales améliorations est l'ajout de deux Propriétés. C'est quelque chose que l'ancienne classe ne faisait pas du tout.

Les deux nouvelles propriétés introduites sont

La couleur de remplissage

et

FillImage

Pour avoir une idée de la façon dont cela fonctionne dans VB.NET, essayez cette expérience simple. Ajoutez une classe à un projet standard, puis entrez le code:

Propriété publique

Lorsque vous appuyez sur Entrée après avoir tapé "Get", VB.NET Intellisense remplit l'intégralité du bloc de code de propriété et tout ce que vous avez à faire est de coder les détails de votre projet. (Les blocs Get et Set ne sont pas toujours requis à partir de VB.NET 2010, vous devez donc au moins en dire autant à Intellisense pour le démarrer.)

Propriété publique Quoi que ce soit Get End Get Set (valeur ByVal) End SetEnd, propriété

Ces blocs ont été complétés dans le code ci-dessus. Le but de ces blocs de code est de permettre l'accès aux valeurs des propriétés à partir d'autres parties du système.

Avec l'ajout de méthodes, vous seriez bien parti pour créer un composant complet. Pour voir un exemple très simple d'une méthode, ajoutez ce code sous les déclarations de propriétés dans la classe betterCheckBox:

Public Sub Emphasize () Me. Police = nouveau système. Dessin. Police (_ "Microsoft Sans Serif", 12.0!, _ Système. Dessin. Le style de police. Bold) Moi. Taille = nouveau système. Dessin. Taille (200, 35) CenterSquare. Décalage (CenterSquare. Gauche - 3, CenterSquare. Haut + 3) End Sub

En plus d'ajuster la police affichée dans une case à cocher, cette méthode ajuste également la taille de la case et l'emplacement du rectangle coché pour tenir compte de la nouvelle taille. Pour utiliser la nouvelle méthode, codez-la de la même manière que n'importe quelle méthode:

MyBetterEmphasizedBox. Souligner()

Et tout comme Propriétés, Visual Studio ajoute automatiquement la nouvelle méthode à Intellisense de Microsoft!

L'objectif principal ici est de simplement montrer comment une méthode est codée. Vous savez peut-être qu'un contrôle CheckBox standard permet également de modifier la police, donc cette méthode n'ajoute pas vraiment beaucoup de fonctions.

L'article suivant de cette série, Programmation d'un contrôle VB.NET personnalisé - Au-delà des bases!, montre une méthode qui le fait et explique également comment remplacer une méthode dans un contrôle personnalisé.

instagram story viewer