Delen via


Hoe een bestaand besturingselement uit te breiden

Als u meer functies wilt toevoegen aan een bestaand besturingselement, kunt u een besturingselement maken dat overkomt van een bestaand besturingselement. Het nieuwe besturingselement bevat alle mogelijkheden en het visuele aspect van het basisbeheer, maar biedt u de mogelijkheid om dit uit te breiden. Als u bijvoorbeeld een besturingselement hebt gemaakt dat Buttonover neemt, ziet het nieuwe besturingselement eruit en fungeert deze precies als een knop. U kunt nieuwe methoden en eigenschappen maken om het gedrag van het besturingselement aan te passen. Met sommige besturingselementen kunt u de methode OnPaint overschrijven om de manier waarop het besturingselement eruitziet te wijzigen.

Aangepast besturingselement toevoegen aan project

Nadat u een nieuw project hebt gemaakt, gebruikt u de Visual Studio-sjablonen om een gebruikersbeheer te maken. De volgende stappen laten zien hoe u een gebruikersbeheer toevoegt aan uw project:

  1. Zoek in Visual Studio het paneel Projectverkenner. Klik met de rechtermuisknop op het project en kiesGebruikersbesturingselement>.

    klik met de rechtermuisknop op Visual Studio Solution Explorer om een gebruikersbesturingselement toe te voegen aan een Windows Forms-project

  2. Selecteer Aangepast besturingselement (Windows Forms).

  3. Typ in het vak Naam een naam voor het gebruikersbeheer. Visual Studio biedt een standaard en unieke naam die u kunt gebruiken. Druk vervolgens op toevoegen.

    Dialoogvenster voor het toevoegen van item in Visual Studio voor Windows Forms

  4. Druk in de ontwerpmodus van het besturingselement op F7 of klik op de koppeling naar codeweergave .

    Aanbeveling

    U kunt ook met de rechtermuisknop op het bestand klikken in het Solution Explorer-venster en Code weergeven selecteren.

Wijzig het aangepaste besturingselement in een knop

In deze sectie leert u hoe u een aangepast element wijzigt in een knop die het aantal klikken telt en weergeeft.

A Windows Forms aangepast besturingselement voor .NET

Nadat u een aangepast besturingselement hebt toegevoegd aan uw project met de naam CustomControl1, moet de ontwerpfunctie voor besturingselementen worden geopend. Als het niet is, dubbelklik op het besturingselement in de Solution Explorer. Volg deze stappen om het aangepaste besturingselement te converteren naar een besturingselement dat erft van Button en het uitbreidt:

  1. Terwijl de ontwerpfunctie voor besturingselementen is geopend, drukt u op F7 of klikt u met de rechtermuisknop op het ontwerpvenster en selecteert u Code weergeven.

  2. In de code-editor ziet u een klassedefinitie:

    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. Wijzig de basisklasse van Control in Button.

    Belangrijk

    Als u Visual Basicgebruikt, wordt de basisklasse gedefinieerd in het *.designer.vb-bestand van uw controle. De basisklasse die in Visual Basic moet worden gebruikt, is System.Windows.Forms.Button.

  4. Voeg een variabele met klassebereik toe met de naam _counter.

    private int _counter = 0;
    
    Private _counter As Integer = 0
    
  5. Overschrijf de methode OnPaint. Met deze methode wordt het besturingselement tekend. Het besturingselement moet een tekenreeks boven op de knop tekenen, dus u moet eerst de OnPaint methode van de basisklasse aanroepen en vervolgens een tekenreeks tekenen.

    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. Ten slotte overschrijft u de methode OnClick. Deze methode wordt aangeroepen telkens wanneer het besturingselement wordt ingedrukt. De code gaat de teller verhogen en vervolgens de Invalidate methode aanroepen, waardoor het besturingselement zichzelf opnieuw moet tekenen.

    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
    

    De uiteindelijke code moet eruitzien als het volgende codefragment:

    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
    

Nu het besturingselement is gemaakt, compileert u het project om het Werkset venster te vullen met het nieuwe besturingselement. Open een formulierontwerper en sleep het besturingselement naar het formulier. Voer het project uit en druk op de knop. Elke druk verhoogt het aantal klikken met één. De totale klikken worden afgedrukt als tekst boven aan de knop.

Visual Studio Toolbox-venster voor Windows Forms met een aangepaste controle.