Partage
  • Partager sur Facebook
  • Partager sur Twitter

Récupérer indices d'un Button dans une matrice

    27 janvier 2021 à 23:36:38

    Bonjour tout le monde, 

    Voici mon problème : 

    J'ai créé des Button de manière automatique de la manière suivante.

     private void Form2_Load(object sender, EventArgs e)
            {
                
    
               
                this.cavalier = Image.FromFile("img\\cavalier.jpg");
    
                this.echiquier = new Button[12, 12];
              
                    
                // initialisation des boutton de l'échiquier
                for (int l = 0; l < 12; l++)
                {
                    for (int c = 0; c < 12; c++)
                    {
                        Button b;
                        b = new Button();
                        b.Location = new Point(l * 50, c * 50);
                        b.Size = new Size(50, 50);
                        b.Click += new System.EventHandler(this.Mon_Bouton_Click);
                        if (c < 2 | c > 9 || l < 2 | l > 9)
                        {
                            b.Visible = false;
                            b.Enabled = false;
                        }
                            
                        this.echiquier[l, c] = b;
                        this.Controls.Add(b); // ??
                    }
                }
            }

    Cette matrice représente un échiquier.

    Le problème que j'ai est que j'aimerais pouvoir récupérer les les indices du Button sur lequel je clique dans la matrice pour plusieurs raisons: 

    - Pour pouvoir afficher une image dessus lorsque je clique sur cellui-ci : l'image d'un cavalier

    - Pour mémorisé l'indice afin de pouvoir faire un retour en arrière lorsque je cliquerais sur un bouton dédié a cette action.

    voici la méthode qui correspond au clique sur le boutton : 

    private void Mon_Bouton_Click(object sender, EventArgs e)
            {
                // recodage de la méthode clique pour qu'elle réagisse a tout type d'erreur
                label1.Text = "";
                saisieI = trouverI(sender, echiquier);
                saisieJ = trouverJ(sender, echiquier);
                if (!impasse(saisieI, saisieJ) && !echiquierParcouru())
                {
                    if (cptTour == 0 || echiquier[saisieI, saisieJ].Text == "X")
                    {
                        jouerModeJoueur(saisieI, saisieJ);
                    }
                    else
                        label1.Text = "Le cavalier ne peux pas se déplacer sur cette case ! ";
                }
                else if (echiquierParcouru())
                {
                    label1.Text = "Vous avez gagné cavalier ! ";
                }
                else
                {
                    effacerEchiquier();
                    echiquier[saisieI, saisieJ].BackgroundImage = cavalier;
                    desactiverEchiquier();
                    label1.Text = "Cavalier dans une impasse !";
                }
            }

    J'ai créer deux méthodes qui retouvent l'indice, cela marche mais j'aimerais savoir s'il existe une méthode plus simple, pour récupérer l'indice et pour le mémoriser.

    Je vous remercie d'avance pour vos réponses.

    -
    Edité par AMB1992 27 janvier 2021 à 23:37:55

    • Partager sur Facebook
    • Partager sur Twitter
      29 janvier 2021 à 11:06:43

      Donne un nom à tes boutons quand tu les créés, par exemple de la forme Bouton-l-c, avec l et c l'indice des coordonnées sur ton échiquier.

      Comme ça, tu peux retrouver la position (l,c) en décomposant son nom sender.Name.Split('-')[1] pour l et sender.Name.Split('-')[2] pour c

      Tu peux aussi affecter une chaine l,c au Tag du bouton et utiliser le même principe.

      • Partager sur Facebook
      • Partager sur Twitter

      Récupérer indices d'un Button dans une matrice

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown