2010-11-18 15 views
3

J'ai donc besoin d'un moyen pour quand une personne clique sur une zone de texte dans une grille 8x8 de zones de texte, le texte dans la zone de texte sur laquelle ils ont cliqué est changé en quelque chose. Ma grille est configurée dans une variable appelée textboxes[,]. Si vous tapez textboxes[0,0], vous obtenez la première case de la grille. A partir de maintenant, avec mes connaissances très limitées, j'ai ceci.Cliquez sur Événement pour plusieurs zones de texte

for (int i = 0; i < 8; i++) 
     { 
      for (int j = 0; j < 8; j++) 
      { 

       textboxes[i, j].Click += new EventHandler(textboxes_Click); 

      } 
     } 

Puis je peux gérer chaque fois que l'on clique sur l'une des cases. Si vous avez une meilleure façon de le faire, j'aimerais l'entendre. Je ne sais pas comment accéder à la boîte qui a été cliquée, principalement le texte. J'espère que j'ai bien expliqué cela. Merci pour votre aide!

-Lewis

Répondre

5

Votre approche est bonne. Il vous suffit de définir des informations supplémentaires pour y faire face en cas, comme suit:

Nous pouvons définir une classe pour mémoriser la position de zone de texte:

public class GridIndex 
{ 
    //stores the position of a textbox 
    public int ipos { get; set; } 
    public int jpos { get; set; } 
} 

Votre morceau de code sightly modifié:

for (int i = 0; i < 8; i++) 
    for (int j = 0; j < 8; j++) 
    { 
    textboxes[i, j].Click += new System.EventHandler(this.textBox_Click); 
    textboxes[i, j].Tag = new GridIndex() { ipos = i, jpos = j }; 
    } 

Et puis votre gestionnaire:

private void textBox_Click(object sender, EventArgs e) 
    { 
     TextBox textBox = sender as TextBox; 

     if (textBox != null) 
     { 
      //Here your have the text of the clicked textbox 
      string text = textBox.Text; 
      //And here the X and Y position of the clicked textbox 
      int ipos = (textBox.Tag as GridIndex).ipos; 
      int jpos = (textBox.Tag as GridIndex).jpos; 
     } 
    } 

Edi t: J'ai fait quelques changements au code, s'il vous plaît, passez en revue.

3

Votre EventHandler a un objet appelé émetteur en tant que paramètre. Vous devez le convertir en TextBox, vous pouvez alors obtenir le texte de la zone de texte.

2

Votre gestionnaire d'événements a la signature:

void Handler(object sender, EventArgs args) 

Où l'expéditeur est une référence à la zone de texte qui a été cliqué. Si vous avez également besoin de savoir i * j à ce stade, j'ai créé une classe dérivée de TextBox qui contient ces nombres.

2

Vous pouvez obtenir les valeurs de zone de texte en écrivant le code suivant

TextBox txt = (TextBox) de l'expéditeur; chaîne texte = txt.Text.ToString(); MessageBox.show (texte);

Espérons que cette aide sera complète pour vous