2012-02-21 2 views
0

Je travaille sur une classe dérivée de la classe UserControl. Cette classe ajoute les attributs [Browsable(false)] et [EditorBrowsable(EditorBrowsableState.Never)] à l'événement TextChanged hérité de la classe Control. Mon nouveau contrôle est comparable à TabPage; il est utilisé à l'intérieur d'une autre classe comparable au TabControl. La raison pour laquelle cela est important est parce que cela signifie que j'ai besoin de l'utilisateur du contrôle pour pouvoir accéder à cet événement. Dans réflecteur .NET, nous voyons que le contrôle TabPage (qui hérite de Panel, qui ajoute également ces deux attributs) « l'emporte sur » ces deux attributs avec le code suivant:Ajouter un attribut à l'événement de base

[Browsable(true), EditorBrowsable(EditorBrowsableState.Always)] 
public event EventHandler TextChanged; 

je copiais ceci dans mon projet, et dans la mesure où je peux dire que cela fonctionne correctement, mais le compilateur me donne un avertissement: "'System.Windows.Forms.Frameset.FunctionPanel.TextChanged' masque le membre hérité 'System.Windows.Forms.UserControl.TextChanged'. mot-clé si la dissimulation était prévue. ". Je ne veux pas masquer l'ancien événement TextChanged; Je veux juste supprimer l'attribut Browsable(false). Bien que le fait de cacher l'ancien événement semble faire le travail à la surface, cela semble être une façon laide et détournée de le faire. Y a-t-il un moyen de le faire sans cacher l'ancien événement? Et sinon, est-il possible d'empêcher le compilateur de me donner un avertissement?

Merci à l'avance, Brandon

Répondre

5

Vous pouvez essayer ce qui suit. Il devrait être sûr dans toutes les situations possibles:

[Browsable(true), EditorBrowsable(EditorBrowsableState.Always)] 
    public new event EventHandler TextChanged { 
     add { 
      base.TextChanged += value; 
     } 
     remove { 
      base.TextChanged -= value; 
     } 
    } 
+0

Merci! C'est exactement ce que je cherche! – aboveyou00

Questions connexes