2011-01-21 14 views
5

Ho creato un controllo utente che contiene una casella di testo. Ho ignorato la proprietà Text del controllo di base come la seguente:Controllo personalizzato Testo sovrascritto Proprietà Valore predefinito

[Browsable(true)] 
    [DefaultValue("")] 
    [Description("Test1"), Category("Test")] 
    public new string Text 
    { 
     get 
     { 
      return textBox1.Text; 
     } 
     set 
     { 
      textBox1.Text= value; 
     } 
    } 

Ora, sto avendo questo problema in cui tutte le istanze creo del controllo in un modulo, il testo hanno sempre un valore del controlname + numero (di istanza). Voglio sapere perché sta succedendo questo e come rimuovere questo valore predefinito? Grazie.

risposta

4

L'intuizione iniziale è che sta chiamando ToString() sull'oggetto. Sostituire ToString() per restituire il valore desiderato.

+1

ho completamente dimenticato ToString(). Questo è probabilmente il motivo per cui ottengo il valore. Grazie, Aaron. Tuttavia, ignorando non ha alcun effetto. Una cosa che ho dimenticato di menzionare è che [Browsable (true)] è l'attributo che causa questo comportamento. Rimuovendolo, tutto funziona come previsto. –

3

L'attributo DefaultValue non imposta il valore predefinito. L'attributo serve a descrivere quale sia il valore predefinito. Devi impostare tu stesso il valore predefinito e quindi usare l'attributo per descriverlo.

Quindi nel vostro esempio, textbox1.Text deve essere compilato con l'id di controllo. Sul vostro UserControl, in OnInit o se del caso, si dovrebbe chiamare

this.Text = ""; 
+1

Ho provato a impostare il testo in molti eventi e non ha funzionato, s_hewitt. Posso fare un trucco per rimuovere il valore, ma è brutto. –

+1

Probabilmente dovrai pubblicare più codice allora. Non mi è chiaro come sono impostati i controlli e come ciò sta portando al problema. –

+1

Il problema è principalmente in [Browsable (true)], come ho menzionato nell'altro commento. Crea un controllo con una casella di testo e prova il codice sopra, e vedrai cosa intendo. Grazie mille per il vostro tempo. –

2
[DefaultValue("")] 
public override string Text 
{ 
    get { return base.Text; } 
    set 
    { 
     if (this.DesignMode && (Environment.StackTrace.Contains("System.Windows.Forms.Design.ControlDesigner.InitializeNewComponent"))) 
      return; 
     base.Text = value; 
     Invalidate(); 
    } 
} 
+2

Benvenuti in StackOverflow, sebbene il codice possa funzionare, per favore non dimenticate di aggiungere una spiegazione. – yvesmancera

Problemi correlati