2010-08-01 4 views
0

Voici la situation:créer gestionnaire générique événement LostFocus dans C#

http://i962.photobucket.com/albums/ae103/kashyaprakesh/misc/denominationwindow.jpg

Je zones de texte à gauche qui accepte les valeurs de dénomination et d'autres zone de texte à droite donne la valeur totale, par exemple. Dans la zone de texte gauche de l'étiquette 1000 si je mets la valeur 5, la valeur est 5000.

J'ai utilisé le gestionnaire d'événements lostFocus pour cela, mais est-il nécessaire de faire le gestionnaire d'événements de focus perdu pour chaque zone de texte? Il y aura sûrement un autre moyen.

private void textBox6_Leave(object sender, EventArgs e) 
{ 
     MessageBox.Show(e.ToString()); 
     if (textBox6.Text == "") 
     { 
      string y = "0"; 
      textBox6.Text = y; 
      textBox8.Text = y; 
     } 
     else 
     { 
      textBox8.Text = populateTotalAmount(textBox6.Text, 1000); 

     } 
     textBox8.ReadOnly = true; 
    } 

    private string populateTotalAmount(string denominations, int value) 
    { 
     int totalVal = Int32.Parse(denominations) * value; 
     return totalVal.ToString(); 
    } 

Je voudrais créer un gestionnaire d'événements générique qui fonctionne sur l'événement LostFocus et aussi je dois passer la valeur différente (c.-à-500100, etc etc etc) afin que je puisse utiliser cette valeur pour l'envoyer populateTotalAmount fonction.

+1

complètement hors sujet Note: vous ne devriez pas utiliser la lettre x pour marquer multiplications, utilisez × à la place. – svick

Répondre

1

Il n'y a pas de raison impérieuse de ne pas simplement parcourir les zones de texte et de calculer le résultat. Ce code fonctionne au temps humain, elle ne peut pas faire la différence entre une microseconde et une milliseconde.

Maintenant, vous pouvez avoir un Laissez gestionnaire d'événements pour toutes les zones de texte. TextChanged fonctionnerait aussi, mais est un peu désorientant.

0

En supposant que vous utilisez WinForms, vous pouvez créer un contrôle personnalisé avec la valeur de multiplication en tant que propriété, puis ajouter ce contrôle au formulaire.

0

Quelque chose comme ça (ne l'ont pas testé)

foreach (Control ctrl in Controls) 
{ 
    if (ctrl is TextBox && ctrl.Name.StartsWith("math")) 
     ctrl.Focused += OnFocus; 
} 
Questions connexes