2009-07-13 8 views
0

J'essaie de créer un CurrencyTextBox qui hérite de TextBox. Je vois un comportement vraiment bizarre que je ne comprends tout simplement pas.Méthode d'appel de la méthode Text sur le TextBox personnalisé

Après beaucoup de tests, je pense que je peux résumer comme suit:

Dans le code de classe, quand j'accéder base.Text (pour obtenir le texte de la zone de texte), je suis réellement obtenir la valeur de retour de mon propriété Text surchargée.

Je pensais que le mot-clé base garantirait que les méthodes de l'objet sous-jacent soient appelées.

Pour démontrer:


public class cTestTextBox : System.Windows.Forms.TextBox 
    { 
     string strText = ""; 

     public cTestTextBox() 
     { 
      SetVal("AAA"); 
      base.Text = "TEST"; 
     } 
     public override string Text 
     { 
      get 
      { 
       string s = strText; 
       s = "++" + s + "++"; 
       return s; 
      } 
     } 
     public void SetVal(string val) 
     { 
      strText = val; 
     } 
    } 

Placez ce contrôle sur un formulaire et définissez un point d'arrêt sur le constructeur. Lancez l'application Passez votre souris sur la base. Expression textuelle. Notez que l'info-bulle vous montre la valeur de la propriété substituée, pas la propriété de base. Exécutez l'instruction SetVal() et passez à nouveau votre souris sur l'expression base.Text. Notez que le tooltop vous montre la valeur de la propriété substituée, pas la propriété de base.

Comment accéder de manière fiable à la propriété Text de la zone de texte dont je hérite?

Répondre

0

Intéressant. Je ne sais pas ce qu'il est advenu du post «supprimé», mais il aurait pu être sur la bonne voie. Pour voir si une classe de base appelle votre .Text, mettez quelque chose dans .Text qui provoque une boucle infinie si c'est ce qui se passe:

public override string Text 
{ 
    get 
    { 
     return base.Text; 
    } 
} 
Questions connexes