2011-01-21 17 views
5

İçinde bir metin kutusu olan bir kullanıcı denetimi oluşturdum. Aşağıdaki gibi bir baz denetimi Text özelliğini geçersiz kıldık: ArtıkÖzel Denetim Geçersiz Kıl Metin Özellik Varsayılan Değer

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

, herhangi örnekler i formda kontrolün oluşturmak bu sorun yaşıyorum, Metin daima + ControlName bir değere sahip sayı (örnek). Bunun neden olduğunu ve bu varsayılan değeri nasıl kaldıracağımızı bilmek istiyorum? Teşekkürler.

cevap

4

İlk öbek, nesneye ToString() numaralı telefonu çağırıyor olmasıdır. İstediğiniz değeri döndürmek için ToString()'u geçersiz kılın.

+1

çağırmalıdır(). Bu muhtemelen değeri almamın nedeni. Sağol Aaron. Bununla birlikte, geçersiz kılan hiçbir etkisi yoktur. Bahsetmeyi unuttuğum bir şey, [Gözatılabilir (doğru)] 'nun bu davranışa neden olan özellik olmasıdır. Bunu kaldırarak her şey beklendiği gibi çalışır. –

3

DefaultValue özniteliği, varsayılan değeri ayarlamaz. Özellik, varsayılan değerin ne olduğunu açıklamak içindir. Varsayılan değeri kendiniz ayarlamanız ve ardından bunu tanımlamak için özniteliği kullanmanız gerekir.

Örneğinizde, textbox1.Text, denetim kimliğiyle doldurulmalıdır. UserControl günü, OnInit ya da her nerede uygun yer, sen ben tamamen ToString unuttum

this.Text = ""; 
+1

Metni birçok olayda denedim ve çalışmadım, s_hewitt. Değeri kaldırmak için bir kırbaç yapabilirim, ama çirkin. –

+1

Muhtemelen daha fazla kod yazmanız gerekecek. Kontrollerinizin nasıl kurulduğunu ve bunun konuya nasıl yol açtığı açık değil. –

+1

Sorun, diğer yorumda belirttiğim gibi çoğunlukla [Gözatılabilir (doğru)] 'da. Üzerinde bir metin kutusu ile bir kontrol oluşturun ve yukarıdaki kodu deneyin, ve ne demek istediğimi göreceksiniz. Zaman ayırdığınız için çok teşekkürler. –

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

StackOverflow'a hoş geldiniz, kodun çalışmasına rağmen, lütfen bir açıklama eklemeyi unutmayın. – yvesmancera

İlgili konular