Extensión de un control existente
Si desea agregar más características a un control existente, puede crear un control que herede de un control existente. El nuevo control contiene todas las funcionalidades y el aspecto visual del control base, pero ofrece la oportunidad de ampliarlo. Por ejemplo, si creó un control que hereda Button, el nuevo control tendría un aspecto y actuaría exactamente como un botón. Puede crear nuevos métodos y propiedades para personalizar el comportamiento del control. Algunos controles permiten invalidar el método OnPaint para cambiar el aspecto del control.
Agregar un control personalizado a un proyecto
Después de crear un proyecto, use las plantillas de Visual Studio para crear un control de usuario. En los pasos siguientes se muestra cómo agregar un control de usuario al proyecto:
En Visual Studio, busque el panel Explorador de proyectos. Haga clic con el botón derecho en el proyecto y elija Agregar>Clase.
En el cuadro Nombre, escriba un nombre para el control de usuario. Visual Studio proporciona un nombre predeterminado y único que puede usar. A continuación, presione Agregar.
Una vez creado el control de usuario, Visual Studio abre el editor de código para el control. El siguiente paso consiste en convertir este control personalizado en un botón y ampliarlo.
Cambiar el control personalizado a un botón
En esta sección, aprenderá a cambiar un control personalizado en un botón que cuenta y muestra el número de veces que se hace clic en él.
Después de agregar un control personalizado a su proyecto llamado CustomControl1
, deberá abrirse el diseñador de controles. Si no es así, haga doble clic en el control en el Explorador de soluciones. Siga estos pasos para convertir el control personalizado en un control que herede de Button
y lo extienda:
Con el diseñador de controles abierto, pulse F7 o haga clic con el botón derecho en la ventana del diseñador y seleccione Ver código.
En el editor de código, debería ver una definición de clase:
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
En primer lugar, agregue una variable con ámbito de clase denominada
_counter
.private int _counter = 0;
Private _counter As Integer = 0
Invalide el método
OnPaint
. Este método dibuja el control. El control debe dibujar una cadena en la parte superior del botón, por lo que debe llamar primero al métodoOnPaint
de la clase base y, a continuación, dibujar una cadena.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
Por último, invalide el método
OnClick
. Se llama a este método cada vez que se presiona el control. El código va a aumentar el contador y, a continuación, llamar al métodoInvalidate
, que obliga al control a volver a dibujarse.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
El código final debe ser similar al siguiente fragmento de código:
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
Ahora que se crea el control, compile el proyecto para rellenar la ventana cuadro de herramientas con el nuevo control. Abra un diseñador de formularios y arrastre el control al formulario. Al ejecutar el proyecto y hacer clic en el botón, verá que cuenta los clics y pinta el texto en la parte superior del botón.
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de