2011-11-18 17 views
7

Duplicar posible:
Text property in a UserControl in C#Cómo exponer la propiedad Text de un control de usuario?

¿Cómo puedo marcar la propiedad de un TextUserControl como navegable?


Un .NET UserControl clase tiene una propiedad Text.

Por desgracia la propiedad de un TextUserControl no es browsable:

// 
// 
// Returns: 
//  The text associated with this control. 
[Bindable(false)] 
[EditorBrowsable(EditorBrowsableState.Never)] 
[Browsable(false)] 
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
public override string Text { get; set; } 

En mi UserControlque quieren para exponer la propiedad Text (es decir, que sea " navegable") en la ventana de propiedades. He intentado ciegamente declarándolo navegable:

[Browsable(true)] 
public override string Text { get; set; } 

y ahora aparece en la ventana de propiedades, excepto que ahora no hace nada.

He intentado llamar a ciegas base.Text para traer de vuelta a la funcionalidad:

[Browsable(true)] 
public override string Text { get {return base.Text;} set { base.Text = value; this.Invalidate(); } } 

y ahora la propiedad hace la función en tiempo de diseño, pero el valor de la propiedad no se conserva a la Form.Designer.cs y es InitalizeComponent código.

Cuál es el adecuada manera de exponer la propiedad UserControlText tal manera que:

  • es navegable en la ventana de propiedades
  • es funcional
  • se conserva en el diseñador de formularios

y, como un bono:

  • saber cuando se cambia
+1

No es un duplicado exacto. Mi pregunta era cómo * * (es decir, la forma correcta, a diferencia de mi teclado maceración al azar) para hacer una propiedad navegable. La otra pregunta es una propiedad que ya se puede explorar, pero que no se está serializando. –

Respuesta

11

Estás en el camino correcto; sólo tiene que añadir [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]

Para saber cuando cambia, anular OnTextChanged:

protected override void OnTextChanged (EventArgs eventArgs) 
{ 
    System.Diagnostics.Trace.WriteLine("OnTextChanged(): eventArgs: " + eventArgs); 
    base.OnTextChanged(eventArgs); 
} 
+0

Perfectamente excelente. –

Cuestiones relacionadas