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.
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.
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.