2011-11-18 12 views
7

Eventuali duplicati:
Text property in a UserControl in C#Come esporre la proprietà Text di un UserControl?

Come faccio a contrassegnare la proprietà Text di un UserControl come sfogliabile?


A. NET UserControl classe ha una proprietà Text.

Purtroppo la proprietà di un UserControlText non browsable è:

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

Nel mio UserControl ho voglio per esporre la proprietà Text (cioè renderlo "sfogliabile") nella finestra delle proprietà. Ho provato ciecamente dichiarandolo sfogliabile:

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

e ora appare nella finestra delle proprietà, solo che adesso non si fa nulla.

Ho provato a chiamare ciecamente base.Text di riportare la funzionalità:

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

e ora la proprietà ha la funzione in fase di progettazione, ma il valore della proprietà non viene mantenuto al Form.Designer.cs ed è InitalizeComponent codice.

Qual è la corretta modo per esporre la proprietà UserControlText in modo che:

  • è sfogliabile nella finestra delle proprietà
  • è funzionale
  • è persistito nel form designer

e, come bonus:

  • sapere quando cambia
+1

Non proprio un duplicato esatto. La mia domanda era * come * (cioè il modo corretto, al contrario del mio uso casuale della tastiera) per rendere una proprietà sfogliabile. L'altra domanda è una proprietà che è già sfogliabile, ma non viene serializzata. –

risposta

11

Sei sulla strada giusta; basta aggiungere [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]

Per sapere quando cambia, ignorare OnTextChanged:

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

Perfettamente eccellente. –

Problemi correlati