Étendre un contrôle existant

Si vous souhaitez ajouter d’autres fonctionnalités à un contrôle existant, vous pouvez créer un contrôle qui hérite d’un contrôle existant. Le nouveau contrôle contient toutes les fonctionnalités et l’aspect visuel du contrôle de base, mais vous donne la possibilité de l’étendre. Par exemple, si vous avez créé un contrôle qui hérite Button, votre nouveau contrôle ressemblerait exactement à un bouton. Vous pouvez créer de nouvelles méthodes et propriétés pour personnaliser le comportement du contrôle. Certains contrôles vous permettent de remplacer la OnPaint méthode pour modifier l’apparence du contrôle.

Ajouter un contrôle personnalisé à un projet

Après avoir créé un projet, utilisez les modèles Visual Studio pour créer un contrôle utilisateur. Les étapes suivantes montrent comment ajouter un contrôle utilisateur à votre projet :

  1. Dans Visual Studio, recherchez le volet Explorateur de projets. Cliquez avec le bouton droit sur le projet et choisissez Ajouter une>classe.

    Cliquez avec le bouton droit sur l’Explorateur de solutions Visual Studio pour ajouter un contrôle utilisateur à un projet Windows Forms

  2. Dans la zone Nom , tapez un nom pour votre contrôle utilisateur. Visual Studio fournit un nom par défaut et unique que vous pouvez utiliser. Ensuite, appuyez sur Ajouter.

    Boîte de dialogue Ajouter un élément dans Visual Studio pour Windows Forms

Une fois le contrôle utilisateur créé, Visual Studio ouvre l’éditeur de code du contrôle. L’étape suivante consiste à transformer ce contrôle personnalisé en un bouton et à l’étendre.

Modifier le contrôle personnalisé en bouton

Dans cette section, vous allez apprendre à modifier un contrôle personnalisé en un bouton qui compte et affiche le nombre de fois où il est cliqué.

Un contrôle personnalisé Windows Forms pour .NET

Une fois que vous avez ajouté un contrôle personnalisé à votre projet nommé CustomControl1, le concepteur de contrôles doit être ouvert. Si ce n’est pas le cas, double-cliquez sur le contrôle dans le Explorateur de solutions. Procédez comme suit pour convertir le contrôle personnalisé en contrôle qui hérite Button et l’étend :

  1. Une fois le concepteur de contrôles ouvert, appuyez sur F7 ou cliquez avec le bouton droit sur la fenêtre du concepteur, puis sélectionnez Afficher le code.

  2. Dans l’éditeur de code, vous devez voir une définition de classe :

    namespace CustomControlProject
    {
        public partial class CustomControl2 : Control
        {
            public CustomControl2()
            {
                InitializeComponent();
            }
    
            protected override void OnPaint(PaintEventArgs pe)
            {
                base.OnPaint(pe);
            }
        }
    }
    
    Public Class CustomControl2
    
        Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
            MyBase.OnPaint(e)
    
            'Add your custom paint code here
        End Sub
    
    End Class
    
  3. Remplacez la classe de base par Control Button.

    Important

    Si vous utilisez Visual Basic, la classe de base est définie dans le fichier *.designer.vb de votre contrôle. La classe de base à utiliser dans Visual Basic est System.Windows.Forms.Button.

  4. Ajoutez une variable délimitée à une classe nommée _counter.

    private int _counter = 0;
    
    Private _counter As Integer = 0
    
  5. Remplacez la méthode OnPaint . Cette méthode dessine le contrôle. Le contrôle doit dessiner une chaîne en haut du bouton. Vous devez donc d’abord appeler la méthode de OnPaint la classe de base, puis dessiner une chaîne.

    protected override void OnPaint(PaintEventArgs pe)
    {
        // Draw the control
        base.OnPaint(pe);
    
        // Paint our string on top of it
        pe.Graphics.DrawString($"Clicked {_counter} times", Font, Brushes.Purple, new PointF(3, 3));
    }
    
    Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
    
        ' Draw the control
        MyBase.OnPaint(e)
    
        ' Paint our string on top of it
        e.Graphics.DrawString($"Clicked {_counter} times", Font, Brushes.Purple, New PointF(3, 3))
    
    End Sub
    
  6. Enfin, remplacez la OnClick méthode. Cette méthode est appelée chaque fois que le contrôle est appuyé. Le code va augmenter le compteur, puis appeler la Invalidate méthode, ce qui force le contrôle à redessiner lui-même.

    protected override void OnClick(EventArgs e)
    {
        // Increase the counter and redraw the control
        _counter++;
        Invalidate();
    
        // Call the base method to invoke the Click event
        base.OnClick(e);
    }
    
    Protected Overrides Sub OnClick(e As EventArgs)
    
        ' Increase the counter and redraw the control
        _counter += 1
        Invalidate()
    
        ' Call the base method to invoke the Click event
        MyBase.OnClick(e)
    
    End Sub
    

    Le code final doit ressembler à l’extrait de code suivant :

    public partial class CustomControl1 : Button
    {
        private int _counter = 0;
    
        public CustomControl1()
        {
            InitializeComponent();
        }
    
        protected override void OnPaint(PaintEventArgs pe)
        {
            // Draw the control
            base.OnPaint(pe);
    
            // Paint our string on top of it
            pe.Graphics.DrawString($"Clicked {_counter} times", Font, Brushes.Purple, new PointF(3, 3));
        }
    
        protected override void OnClick(EventArgs e)
        {
            // Increase the counter and redraw the control
            _counter++;
            Invalidate();
    
            // Call the base method to invoke the Click event
            base.OnClick(e);
        }
    }
    
    Public Class CustomControl1
    
        Private _counter As Integer = 0
    
        Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
    
            ' Draw the control
            MyBase.OnPaint(e)
    
            ' Paint our string on top of it
            e.Graphics.DrawString($"Clicked {_counter} times", Font, Brushes.Purple, New PointF(3, 3))
    
        End Sub
    
        Protected Overrides Sub OnClick(e As EventArgs)
    
            ' Increase the counter and redraw the control
            _counter += 1
            Invalidate()
    
            ' Call the base method to invoke the Click event
            MyBase.OnClick(e)
    
        End Sub
    
    End Class
    

Maintenant que le contrôle est créé, compilez le projet pour remplir la fenêtre Boîte à outils avec le nouveau contrôle. Ouvrez un concepteur de formulaires et faites glisser le contrôle vers le formulaire. Exécutez le projet et appuyez sur le bouton. Chaque pression augmente le nombre de clics par un. Le nombre total de clics est imprimé sous forme de texte en haut du bouton.

Fenêtre Boîte à outils Visual Studio pour Windows Forms montrant un contrôle personnalisé.