Dela via


Utöka en befintlig kontroll

Om du vill lägga till fler funktioner i en befintlig kontroll kan du skapa en kontroll som ärver från en befintlig kontroll. Den nya kontrollen innehåller alla funktioner och visuella aspekter av baskontrollen, men ger dig möjlighet att utöka den. Om du till exempel har skapat en kontroll som ärver Buttonskulle den nya kontrollen se ut och fungera exakt som en knapp. Du kan skapa nya metoder och egenskaper för att anpassa kontrollens beteende. Med vissa kontroller kan du åsidosätta metoden OnPaint för att ändra hur kontrollen ser ut.

Lägga till en anpassad kontroll i ett projekt

När du har skapat ett nytt projekt använder du Visual Studio-mallarna för att skapa en användarkontroll. Följande steg visar hur du lägger till en användarkontroll i projektet:

  1. Leta reda på fönstret Project Explorer i Visual Studio. Högerklicka på projektet och välj Lägg till>användarkontroll.

    Högerklicka på Visual Studio Solution Explorer för att lägga till en användarkontroll i ett Windows Forms-projekt

  2. Välj objektet Anpassad kontroll (Windows-formulär).

  3. I rutan Namn anger du ett namn för användarkontrollen. Visual Studio innehåller ett standardnamn och ett unikt namn som du kan använda. Tryck sedan på Lägg till.

    Lägg till objekt dialogrutan i Visual Studio för Windows Forms

  4. I designläge för kontrollen trycker du på F7 eller klickar på länken växla till kodvy .

    Tips/Råd

    Du kan också högerklicka på filen i Solution Explorer-fönstret och välja Visa kod.

Ändra den anpassade kontrollen till en knapp

I det här avsnittet får du lära dig hur du ändrar en anpassad kontroll till en knapp som räknas och visar hur många gånger den klickas.

Anpassade Windows-formulär för .NET-kontroll

När du lägger till en anpassad kontroll i ditt projekt med namnet CustomControl1, bör kontrolldesignern öppnas. Om det inte är fallet, dubbelklickar du på kontrollen i Solution Explorer. Följ dessa steg för att konvertera den anpassade kontrollen till en kontroll som ärver från Button och utökar den:

  1. När kontrolldesignern har öppnats trycker du på F7 eller högerklickar på designerfönstret och väljer Visa kod.

  2. I kodredigeraren bör du se en klassdefinition:

    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. Ändra basklassen från Control till Button.

    Viktigt!

    Om du använder Visual Basicdefinieras basklassen i *.designer.vb-filen för kontrollen. Basklassen som ska användas i Visual Basic är System.Windows.Forms.Button.

  4. Lägg till en klassvariabel med namnet _counter.

    private int _counter = 0;
    
    Private _counter As Integer = 0
    
  5. Åsidosätt metoden OnPaint. Den här metoden ritar styrningen. Kontrollen bör rita en sträng ovanpå knappen, så du måste anropa basklassens OnPaint-metoden först och sedan rita en sträng.

    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. Slutligen åsidosätter du metoden OnClick. Den här metoden anropas varje gång kontrollen trycks in. Koden kommer att öka räknaren och sedan anropa metoden Invalidate, vilket tvingar kontrollen att rita om sig själv.

    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
    

    Den slutliga koden bör se ut som följande kodfragment:

    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 när kontrollen har skapats kompilerar du projektet för att fylla i fönstret Toolbox med den nya kontrollen. Öppna en formulärdesigner och dra kontrollen till formuläret. Kör projektet och tryck på knappen. Varje tryck ökar antalet klick med en. Det totala antalet klick skrivs ut som text överst på knappen.

Visual Studio Toolbox-fönster för Windows Forms som visar en anpassad kontroll.