Sdílet prostřednictvím


Rozšíření existujícího ovládacího prvku

Pokud chcete do existujícího ovládacího prvku přidat další funkce, můžete vytvořit ovládací prvek, který dědí z existujícího ovládacího prvku. Nový ovládací prvek obsahuje všechny možnosti a vizuální aspekt základního ovládacího prvku, ale dává vám příležitost ho rozšířit. Pokud jste například vytvořili ovládací prvek, který dědí Button, nový ovládací prvek by vypadal a fungoval přesně jako tlačítko. Můžete vytvořit nové metody a vlastnosti pro přizpůsobení chování ovládacího prvku. Některé ovládací prvky umožňují přepsat metodu OnPaint, aby se změnilo, jak ovládací prvek vypadá.

Přidání vlastního ovládacího prvku do projektu

Po vytvoření nového projektu pomocí šablon sady Visual Studio vytvořte uživatelský ovládací prvek. Následující kroky ukazují, jak do projektu přidat uživatelský ovládací prvek:

  1. Ve Visual Studio vyhledejte podokno Průzkumník projektů. Klikněte pravým tlačítkem myši na projekt a zvolte Přidat>třídy.

    kliknutím pravým tlačítkem na průzkumníka řešení sady Visual Studio přidáte uživatelský ovládací prvek do projektu Windows Forms

  2. Do pole Název zadejte jméno uživatelského ovládacího prvku. Visual Studio poskytuje výchozí a jedinečný název, který můžete použít. Potom stiskněte Přidat.

    Dialogové okno pro přidání položky v sadě Visual Studio pro Windows Forms

Po vytvoření uživatelského ovládacího prvku visual Studio otevře editor kódu pro ovládací prvek. Dalším krokem je převést tento vlastní ovládací prvek na tlačítko a rozšířit ho.

Změna vlastního ovládacího prvku na tlačítko

V této části se dozvíte, jak změnit vlastní ovládací prvek na tlačítko, které se počítá a zobrazuje počet kliknutí.

uživatelsky definovaný ovládací prvek Windows Forms pro .NET

Po do projektu přidáte vlastní ovládací prvek s názvem CustomControl1, měl by být otevřen návrhář ovládacích prvků. Pokud není, poklikejte na ovládací prvek v Průzkumníku řešení . Pomocí následujícího postupu převeďte vlastní ovládací prvek na ovládací prvek, který dědí z Button a rozšiřuje ho:

  1. Při otevření návrháře ovládacích prvků stiskněte F7 nebo klikněte pravým tlačítkem myši na okno návrháře a vyberte Zobrazit kód.

  2. V editoru kódu byste měli vidět definici třídy:

    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. Změňte základní třídu z Control na Button.

    Důležitý

    Pokud používáte jazyk Visual Basic, základní třída je definována v souboru *.designer.vb vašeho ovládacího prvku. Základní třída, která se má použít v jazyce Visual Basic, je System.Windows.Forms.Button.

  4. Přidejte proměnnou s oborem třídy s názvem _counter.

    private int _counter = 0;
    
    Private _counter As Integer = 0
    
  5. Přepište metodu OnPaint. Tato metoda nakreslí ovládací prvek. Ovládací prvek by měl nakreslit řetězec nad tlačítkem, takže je třeba nejprve zavolat metodu OnPaint ze základní třídy a poté nakreslit řetězec.

    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. Nakonec přepište metodu OnClick. Tato metoda se volá při každém stisknutí ovládacího prvku. Kód nejprve zvýší čítač a poté zavolá metodu Invalidate, která vynutí překreslení ovládacího prvku.

    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
    

    Konečný kód by měl vypadat jako následující fragment kódu:

    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
    

Teď, když je ovládací prvek vytvořen, zkompilujte projekt tak, aby se okno s novým ovládacím prvkem naplnilo. Otevřete návrháře formulářů a přetáhněte ovládací prvek do formuláře. Spusťte projekt a stiskněte tlačítko. Každé stisknutí zvýší počet kliknutí o jeden. Celkový počet kliknutí se vytiskne jako text v horní části tlačítka.

okno nástrojů Visual Studio pro Windows Forms, které zobrazuje vlastní ovládací prvek.