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ěnil vzhled ovládacího prvku.
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:
V sadě Visual Studio vyhledejte podokno Průzkumníka projektů. Klikněte pravým tlačítkem myši na projekt a zvolte Přidat>třídu.
Do pole Název zadejte název 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 přidání vlastního ovládacího prvku do projektu s názvem CustomControl1
by se měl otevřít návrhář ovládacího prvku. Pokud není, poklikejte na ovládací prvek v Průzkumník řešení. Pomocí těchto kroků převedete vlastní ovládací prvek na ovládací prvek, který zdědí Button
a rozšíří ho:
Otevřete návrháře ovládacích prvků, stiskněte klávesu 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
Nejprve 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 musíte nejprve volat metodu základní třídyOnPaint
a pak 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 zvýší čítač a pak zavolá metoduInvalidate
, která vynutí ovládací prvek překreslit sám.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 Panel nástrojů naplnilo novým ovládacím prvku. Otevřete návrháře formulářů a přetáhněte ovládací prvek do formuláře. Když projekt spustíte a kliknete na tlačítko, uvidíte, že spočítá kliknutí a vykreslí text v horní části tlačítka.
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro