2010-05-27 4 views
2

J'ai un tableau TextBoxGet Index de contrôle dans un contrôle-Array

private TextBox[,] Fields = new TextBox[9, 9]; 

et toutes les zones de texte ont obtenu le même TextChanged-Event

void Field_Changed(object sender, EventArgs e) 

Y at-il un moyen d'obtenir l'indice de l'expéditeur dans le tableau (sans donner à chaque TextBox son propre EventHandler)?

Répondre

1
  1. Avez-vous vraiment besoin de l'index, l'expéditeur est une référence à l'instance qui envoie la requête. Si la réponse à 1 est oui, vous pouvez mettre l'index dans la propriété 'Tag' de la zone de texte, puis interroger cela.

  2. Vous pouvez également rechercher dans le tableau l'instance correspondant à l'argument sender de l'événement.

0

Essayez d'attribuer à chaque zone de texte son propre Tag ou Name à l'initialisation, puis vous pouvez convertir sender en une zone de texte et examiner l'une de ces propriétés.

1

Vous devrez pratiquement faire une boucle dans votre tableau et faire une vérification d'égalité de référence dans chaque zone de texte.

Soit cela ou affecter l'index à la balise lorsque vous insérez les contrôles dans la baie. Mais c'est une micro optimisation qui n'en vaut pas vraiment la peine.

0

Vous pouvez parcourir les objets et de trouver celui dont la référence est égal à l'expéditeur:

for (int i = 0; i < 9; i++) 
{ 
    for (int j = 0; j < 9; j++) 
    { 
     if (Object.ReferenceEquals(sender, Fields[i, j])) 
      Console.WriteLine(i + " " + j); 
    } 
} 
0

Prendre un œil sur l'Array Members pourrait aider.

Ceux que vous cherchez particulièrement sont les méthodes IndexOf(). Il y a plusieurs surcharges. Choisissez celui qui convient le mieux à vos besoins.

+1

Fonctionne uniquement avec des tableaux unidimensionnels aussi loin que je peux voir. – jacob1123

Questions connexes