2017-09-07 7 views
0

J'ai créé un contrôle Textbox personnalisé, j'essaie de définir un texte par défaut pour la zone de texte. Donc, dans son constructeur, je dis Text = "My Default Text", cela ne semble pas affecter le contrôle en mode conception.Custom TextBox - La propriété Text ne fonctionne pas dans le constructeur

Voici le code de la zone de texte personnalisé:

using System.Windows.Forms; 

namespace MyNameSpace 
{ 
    public class xTextBox : TextBox 
    { 
     public xTextBox() 
     { 
      BorderStyle = BorderStyle.None; 
      Text = "My Default Text"; 
     } 
    } 
} 

Alors je laisse tomber que le contrôle sur une usercontrol, aucun texte :(

Control dropped

Voici ce que je vois dans les propriétés boîte: Text propriété vide

Properties box

+0

Je ne pense pas que le mode de conception de Visual Studio appelle des constructeurs de contrôle lors de leur affichage. –

+0

Visual Studio appelle le constructeur, dans ma situation '' BorderStyle'' est appliqué. J'observe que c'est seulement la propriété '' Text'' qui échoue –

+0

J'ai essayé un bouton de contrôle personnalisé '' XButton'', une fois abandonné VS créer le contrôle et définir '' "XButton1" '' comme texte et ignorer le texte I mettre dans son constructeur. J'ai ajouté '' BackColor = Color.Yellow'' qui a fonctionné –

Répondre

0

Le problème est expliqué ici: Virtual member call in a constructor

En bref pour obtenir ce que vous voulez, vous devez avoir une classe scellée:

public sealed class xTextBox : TextBox 
{ 
    public xTextBox() 
    { 
     BorderStyle = BorderStyle.None; 
     Text = "My Default Text"; 
    } 
} 

ou scellé propriété Text:

public class xTextBox : TextBox 
{ 
    public xTextBox() 
    { 
     BorderStyle = BorderStyle.None; 
     Text = "My Default Text"; 
    } 

    public sealed override string Text 
    { 
     get { return base.Text; } 
     set { base.Text = value; } 
    } 
} 

enter image description here

+0

Cela ne fonctionne toujours pas, je pense que c'est un problème de Visual Studio, j'observe que si je ferme le concepteur et réouvre le '' Text'' apparaît. –

+0

Cela fonctionne. Vous devez créer une solution après avoir modifié quelque chose dans les contrôles. – Reniuz

+0

Je l'ai fait, rien n'a changé; J'ai nettoyé la solution fermée VS, redémarrée et reconstruite; de même, le texte de contrôle est vide une fois tombé. J'observe que le problème est la propriété '' Text''. S'il vous plaît lire mes commentaires sur la question –

0

Le texte doit être une variable en dehors d'une fonction.

Public string Text { 
      get { return this;} 
      set{value = this;} 
} 

Donc quelque chose comme ça. Il y a peut-être des erreurs dans le code ci-dessus parce que je l'ai tapé sur mon mobile. Après avoir quelque chose comme ça, définissez la valeur du texte où vous voulez.