Estendere un controllo esistente
Se si desidera aggiungere altre funzionalità a un controllo esistente, è possibile creare un controllo che eredita da un controllo esistente. Il nuovo controllo contiene tutte le funzionalità e l'aspetto visivo del controllo di base, ma offre la possibilità di estenderlo. Ad esempio, se è stato creato un controllo che eredita Button, il nuovo controllo sarà simile a un pulsante. È possibile creare nuovi metodi e proprietà per personalizzare il comportamento del controllo. Alcuni controlli consentono di eseguire l'override del OnPaint metodo per modificare l'aspetto del controllo.
Aggiungere un controllo personalizzato a un progetto
Dopo aver creato un nuovo progetto, usare i modelli di Visual Studio per creare un controllo utente. I passaggi seguenti illustrano come aggiungere un controllo utente al progetto:
In Visual Studio trovare il riquadro Esplora progetti . Fare clic con il pulsante destro del mouse sul progetto e scegliere Aggiungi>classe.
Nella casella Nome digitare un nome per il controllo utente. Visual Studio fornisce un nome predefinito e univoco che è possibile usare. Premere quindi Aggiungi.
Dopo aver creato il controllo utente, Visual Studio apre l'editor di codice per il controllo . Il passaggio successivo consiste nel trasformare questo controllo personalizzato in un pulsante ed estenderlo.
Modificare il controllo personalizzato in un pulsante
In questa sezione si apprenderà come modificare un controllo personalizzato in un pulsante che conta e visualizza il numero di volte in cui viene fatto clic.
Dopo aver aggiunto un controllo personalizzato al progetto denominato CustomControl1
, la finestra di progettazione dei controlli deve essere aperta. In caso contrario, fare doppio clic sul controllo nel Esplora soluzioni. Seguire questa procedura per convertire il controllo personalizzato in un controllo che eredita da Button
e lo estende:
Dopo aver aperto la finestra di progettazione dei controlli, premere F7 o fare clic con il pulsante destro del mouse sulla finestra di progettazione e selezionare Visualizza codice.
Nell'editor di codice dovrebbe essere visualizzata una definizione di classe:
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
Modificare la classe base da
Control
aButton
.Importante
Se si usa Visual Basic, la classe di base viene definita nel file *.designer.vb del controllo. La classe base da usare in Visual Basic è
System.Windows.Forms.Button
.Aggiungere una variabile con ambito classe denominata
_counter
.private int _counter = 0;
Private _counter As Integer = 0
Eseguire l'override del metodo
OnPaint
. Questo metodo disegna il controllo . Il controllo deve disegnare una stringa sopra il pulsante, quindi è necessario chiamare prima il metodo dellaOnPaint
classe di base, quindi disegnare una stringa.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
Infine, eseguire l'override del
OnClick
metodo . Questo metodo viene chiamato ogni volta che viene premuto il controllo. Il codice aumenterà il contatore e quindi chiamerà ilInvalidate
metodo , che forza il controllo a ridisegnarsi.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
Il codice finale dovrebbe essere simile al frammento di codice seguente:
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
Dopo aver creato il controllo, compilare il progetto per popolare la finestra casella degli strumenti con il nuovo controllo . Aprire una finestra di progettazione moduli e trascinare il controllo nel form. Eseguire il progetto e premere il pulsante. Ogni pressione aumenta il numero di clic di uno. I clic totali vengono stampati come testo nella parte superiore del pulsante.
.NET Desktop feedback