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:
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.
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.
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í.
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:
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.
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
Změňte základní třídu z
Control
naButton
.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
.Přidejte proměnnou s oborem třídy s názvem
_counter
.private int _counter = 0;
Private _counter As Integer = 0
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 metoduOnPaint
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
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á metoduInvalidate
, 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.
.NET Desktop feedback