Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
En este artículo se explica cómo agregar un control de usuario al proyecto y, a continuación, agregar ese control de usuario a un formulario. Creará un control de usuario reutilizable que sea visualmente atractivo y funcional. El nuevo control agrupa un control TextBox con un control Button. Cuando el usuario selecciona el botón, se borra el texto del cuadro de texto. Para obtener más información sobre los controles de usuario, consulte Información general sobre el control de usuario.
Comprensión de los usuarios de sistemas de control
A lo largo de este artículo, el término consumidor hace referencia a cualquier código que use el control de usuario. Esto incluye:
- Formularios que contienen el control de usuario.
- Otros controles que hospedan el control de usuario.
- Aplicaciones que hacen referencia a la biblioteca de control de usuario.
Al crear un control de usuario, va a crear un componente reutilizable. El consumidor es quien use ese componente colocándolo en un formulario, estableciendo sus propiedades o respondiendo a sus eventos. El consumidor no necesita conocer los controles internos (como el TextBox y el Button) que componen su control de usuario; solo interactúan con las propiedades y eventos que usted decide exponer.
Patrón de código esencial para controles de usuario
Antes de agregar la implementación detallada, resulta útil comprender el patrón de código mínimo viable para un control de usuario. En su núcleo, un control de usuario necesita:
- Reenvío de eventos: transferencia de eventos desde los controles internos al consumidor.
- Exposición de propiedades - Permite al consumidor acceder a las propiedades internas del control.
- Comportamiento lógico : controle las interacciones entre los controles internos.
En el código siguiente se muestran estos patrones. No necesita todo este código para un control de usuario básico, pero estos patrones ayudan a crear un componente profesional y reutilizable que se integre bien con el diseñador y las aplicaciones de consumidor.
Adición de un nuevo control de usuario
Después de abrir el proyecto de Windows Forms en Visual Studio, use las plantillas de Visual Studio para crear un control de usuario:
En Visual Studio, busque la ventana Explorador de soluciones. Haga clic con el botón derecho en el proyecto y seleccione Agregar>Control de usuario (Windows Forms).
Establezca el elemento Name del control en ClearableTextBox y pulse Agregar.
Una vez creado el control de usuario, Visual Studio abre el diseñador:
Diseño del cuadro de texto que se puede borrar
El control de usuario se compone de controles constituyentes, que son los controles que crea en la superficie de diseño, igual que cuando diseña un formulario. Siga estos pasos para agregar y configurar el control de usuario y sus controles constituyentes:
Con el diseñador abierto, la superficie de diseño del control de usuario debe ser el objeto seleccionado. Si no es así, haga clic en la superficie de diseño para seleccionarla. Establezca las siguientes propiedades en la ventana Propiedades:
Propiedad Importancia TamañoMínimo 84, 53Tamaño 191, 53Agregue un control Label. Establezca las siguientes propiedades:
Propiedad Importancia Nombre lblTitleUbicación 3, 5Agregue un control TextBox. Establezca las siguientes propiedades:
Propiedad Importancia Nombre txtValueAncla Top, Left, RightUbicación 3, 23Tamaño 148, 23Agregue un control Button. Establezca las siguientes propiedades:
Propiedad Importancia Nombre btnClearAncla Top, RightUbicación 157, 23Tamaño 31, 23Mensaje de texto ↻El control debe tener un aspecto similar al de la siguiente imagen:
Presione F7 para abrir el editor de código de la clase
ClearableTextBox.Realice los siguientes cambios en el código:
En la parte superior del archivo de código, importe el namespace
System.ComponentModel.Agregue el atributo
DefaultEventa la clase. Este atributo establece qué evento se genera cuando el consumidor (el formulario o la aplicación que usa este control) hace doble clic en el control en el diseñador. Para obtener más información sobre los atributos, consulte Atributos (C#) o Información general sobre los atributos (Visual Basic).using System.ComponentModel; namespace UserControlProject { [DefaultEvent(nameof(TextChanged))] public partial class ClearableTextBox : UserControlImports System.ComponentModel <DefaultEvent("TextChanged")> Public Class ClearableTextBoxAgregue un controlador de eventos que reenvíe el evento
TextBox.TextChangeda los usuarios de su control personalizado.[Browsable(true)] public new event EventHandler? TextChanged { add => txtValue.TextChanged += value; remove => txtValue.TextChanged -= value; }<Browsable(True)> Public Shadows Custom Event TextChanged As EventHandler AddHandler(value As EventHandler) AddHandler txtValue.TextChanged, value End AddHandler RemoveHandler(value As EventHandler) RemoveHandler txtValue.TextChanged, value End RemoveHandler RaiseEvent(sender As Object, e As EventArgs) End RaiseEvent End EventFíjese que el evento tiene el atributo
Browsabledeclarado en él. Cuando el atributoBrowsablese aplica a un evento o propiedad, controla si el elemento está visible o no en la ventana Propiedades cuando se selecciona el control en el diseñador. En este caso,truese pasa como un parámetro al atributo para indicar que el evento debe estar visible.Agregue una propiedad de cadena denominada
Text, que expone la propiedadTextBox.Texta los consumidores del control de usuario.[Browsable(true)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] public new string Text { get => txtValue.Text; set => txtValue.Text = value; }<Browsable(True)> <DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)> Public Shadows Property Text() As String Get Return txtValue.Text End Get Set(value As String) txtValue.Text = value End Set End PropertyAgregue una propiedad de cadena denominada
Title, que expone la propiedadLabel.Texta los consumidores del control de usuario.[Browsable(true)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] public string Title { get => lblTitle.Text; set => lblTitle.Text = value; }<Browsable(True)> <DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)> Public Property Title() As String Get Return lblTitle.Text End Get Set(value As String) lblTitle.Text = value End Set End Property
Vuelva al diseñador de
ClearableTextBoxy haga doble clic en el controlbtnClearpara generar un controlador para el eventoClick. Agregue el código siguiente para el controlador, que borra el cuadro de textotxtValue:private void btnClear_Click(object sender, EventArgs e) => Text = "";Private Sub btnClear_Click(sender As Object, e As EventArgs) txtValue.Text = "" End SubPor último, compile el proyecto haciendo clic en él con el botón derecho desde la ventana Explorador de soluciones y seleccionando Compilar. No debería haber errores y, una vez finalizada la compilación, el control
ClearableTextBoxdebería aparecer en el cuadro de herramientas para su uso.
El siguiente paso consiste en usar el control en un formulario.
Aplicación de ejemplo
Si ha creado un nuevo proyecto en la última sección, tiene un Form en blanco llamado Form1, de lo contrario, cree un nuevo formulario.
En la ventana Explorador de soluciones, haga doble clic en el formulario para abrir el diseñador. Se debe seleccionar la superficie de diseño del formulario.
Establezca la propiedad
Sizedel formulario en432, 315.Abra la ventana Cuadro de herramientas y haga doble clic en el control ClearableTextBox. Este control debería aparecer en una sección denominada igual que el proyecto.
De nuevo, haga doble clic en el control ClearableTextBox para generar un segundo control.
Vuelva al diseñador y separe los controles para que pueda ver ambos.
Seleccione un control y establezca las siguientes propiedades:
Propiedad Importancia Nombre ctlFirstNameUbicación 12, 12Tamaño 191, 53Título First NameSeleccione el otro control y establezca las siguientes propiedades:
Propiedad Importancia Nombre ctlLastNameUbicación 12, 71Tamaño 191, 53Título Last NameDe nuevo en la ventana de herramientas , agregue un control de etiqueta al formulario y establezca las siguientes propiedades:
Propiedad Importancia Nombre lblFullNameUbicación 12, 252Después, debe generar los controladores de eventos para los dos controles de usuario. En el diseñador, haga doble clic en el control
ctlFirstName. Esta acción genera el controlador de eventos para el eventoTextChangedy abre el editor de código.Cambie al diseñador y haga doble clic en el control
ctlLastNamepara generar el segundo controlador de eventos.Cambie al diseñador y haga doble clic en la barra de título del formulario. Esta acción genera un controlador de eventos para el evento
Load.En el editor de código, agregue un método denominado
UpdateNameLabel. Este método combina ambos nombres para crear un mensaje y asigna el mensaje al controllblFullName.private void UpdateNameLabel() { if (string.IsNullOrWhiteSpace(ctlFirstName.Text) || string.IsNullOrWhiteSpace(ctlLastName.Text)) lblFullName.Text = "Please fill out both the first name and the last name."; else lblFullName.Text = $"Hello {ctlFirstName.Text} {ctlLastName.Text}, I hope you're having a good day."; }Private Sub UpdateNameLabel() If String.IsNullOrWhiteSpace(ctlFirstName.Text) Or String.IsNullOrWhiteSpace(ctlLastName.Text) Then lblFullName.Text = "Please fill out both the first name and the last name." Else lblFullName.Text = $"Hello {ctlFirstName.Text} {ctlLastName.Text}, I hope you're having a good day." End If End SubPara ambos controladores de eventos
TextChanged, llame al métodoUpdateNameLabel:private void ctlFirstName_TextChanged(object sender, EventArgs e) => UpdateNameLabel(); private void ctlLastName_TextChanged(object sender, EventArgs e) => UpdateNameLabel();Private Sub ctlFirstName_TextChanged(sender As Object, e As EventArgs) Handles ctlFirstName.TextChanged UpdateNameLabel() End Sub Private Sub ctlLastName_TextChanged(sender As Object, e As EventArgs) Handles ctlLastName.TextChanged UpdateNameLabel() End SubPor último, llame al método
UpdateNameLabeldesde el eventoLoaddel formulario:private void Form1_Load(object sender, EventArgs e) => UpdateNameLabel();Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load UpdateNameLabel() End Sub
Ejecute el proyecto y escriba un nombre y un apellido:
Intente presionar el botón ↻ para restablecer uno de los cuadros de texto.
.NET Desktop feedback