2009-07-29 3 views
2

Ok, voici l'affaire. J'ai un graphique, qui "écoute" les champs de texte de certaines étiquettes, et représente graphiquement leurs valeurs. Il le fait en ajoutant les valeurs sur l'événement TextChanged.C#: Evénement TextChanged d'un contrôle ne se déclenche pas sur "assign"

Le problème: TextChanged se déclenche uniquement lorsque le texte a effectivement changé (évidemment), et non lorsqu'il a reçu une nouvelle valeur. Ce dont j'ai besoin: Un moyen de détecter si le champ Texte de l'étiquette a été mis à jour (assigné à), et tout ce que je dois travailler est une référence au contrôle (c'est-à-dire l'étiquette). Je réalise que TextChanged n'a pas été conçu pour cela, c'est pourquoi je me demande si l'un d'entre vous a rencontré un problème similaire et a trouvé une solution.

Répondre

1

Il est pratique assez courante dans les « faiseurs » d'ignorer les changements insignifiants, par exemple:

public int Foo { 
    get {return foo;} 
    set { 
     if(foo != value) { 
      foo = value; 
      OnFooChanged(); 
     } 
    } 
} 

Si Text se comporte comme ça, et vous comptez sur toutes mises à jour provoque un événement, il peut ne pas fonctionner comme vous le souhaitez. J'essaierais probablement de trouver un autre moyen de faire ce que tu veux; peut-être en utilisant un objet intermédiaire qui passe les valeurs à travers.

0

Vous pouvez créer votre propre contrôle qui hérite de ce contrôle et créer votre propre propriété Text qui déclenchera un événement si une nouvelle valeur lui est affectée.

+0

Si vous voulez dire 'override', alors c'est bien; mais si "créez le vôtre" signifie "nouveau Texte {...}", alors ce serait mauvais ... –

+0

Il est trop tôt le matin pour moi;), mais ouais - déroger – TWith2Sugars

2

La raison pour laquelle votre gestionnaire d'événements TextChanged n'est pas invoqué lors de l'attribution initiale du texte est qu'il est attaché après l'affectation du premier texte (le concepteur semble faire les choses dans cet ordre par défaut). Je ferais comme ceci:

  • TextChanged appelle une autre méthode (UpdateGraph)
  • UpdateGraph recueille les données nécessaires et met à jour le graphique
  • Appel UpdateGraph comme la dernière chose faite lors du chargement de la forme

Cela permettra de s'assurer que le graphique est mis à jour avec les valeurs initiales. Il est important que cet appel se passe après l'appel à InitializeComponent.

Questions connexes