2010-01-17 34 views
55

He desarrollado un Control de usuario en Visual Studio (WinForms C#) y tengo una pregunta.Control de usuario - Propiedades personalizadas

Necesito que el usuario de mi Control de usuario pueda cambiar ciertos valores de cadena y me gustaría que puedan agregar el control de usuario a su Formulario y hacer clic en él para que aparezca el Panel de propiedades donde mi Control de usuario Se mostrarán propiedades personalizadas.

¿Cómo puedo tener mis propias propiedades personalizadas para mi control de usuario? Por ejemplo:

Mi control de usuario contiene un TextBox, y me gustaría que el usuario pueda cambiar el valor de ese TextBox a través de una propiedad denominada "Texto" o "Valor" en las propiedades en Design-Time.

+0

Véase el artículo aquí - [Creación de controles personalizados en C#] (http://www.c-sharpcorner.com/UploadFile/f5a10c/creating-custom-controls- in-C-Sharp /) –

Respuesta

88

Esto se hace a través de los atributos de las propiedades, así:

[Description("Test text displayed in the textbox"),Category("Data")] 
public string Text { 
    get { return myInnerTextBox.Text; } 
    set { myInnerTextBox.Text = value; } 
} 

La categoría es la partida en la que aparecerá la propiedad en el estudio de la caja propiedades visuales. Here's a more complete MSDN reference, incluida una lista de categorías.

+2

Mi VS2010 falla cada vez que quiero generar el proyecto con este código, ya sea si incluyo System.ComponentModel o no: & –

6

Solo agregue las propiedades públicas al control del usuario.

Puede añadir [Category("MyCategory")] y [Description("A property that controls the wossname")] atributos para que sea más agradable, pero siempre y cuando se trata de un público propiedad que debe aparecer en el panel de propiedades.

31

Es muy sencillo, basta con añadir una propiedad:

public string Value { 
    get { return textBox1.Text; } 
    set { textBox1.Text = value; } 
} 

Utilizando la propiedad de texto es un poco más complicado, la clase de control de usuario oculta intencionadamente. Tendrá que anular los atributos:

[Browsable(true), EditorBrowsable(EditorBrowsableState.Always)] 
public override string Text { 
    get { return textBox1.Text; } 
    set { textBox1.Text = value; } 
} 
+1

¡Muchas gracias! Me olvidé completamente de este y me estaba volviendo loco intentando recordar. – Damian

Cuestiones relacionadas