Evénement de clic dynamic sur PictureBox

Je reçois une liste d’images d’un répertoire et stocke les noms de fichiers dans une List . Je passe ensuite en boucle dans chacun d’eux et crée un PictureBox pour chacun d’eux, puis j’ajoute le même événement de clic à chacun d’eux. Les contrôles sont dans un FlowLayoutPanel

 foreach(Ssortingng file in this._files){ PictureBox box = new PictureBox(); box.Height = 50; box.Width = 50; box.ImageLocation = file; box.SizeMode = PictureBoxSizeMode.Zoom; box.Click += this.PictureClick; this.flowLayoutPanel1.Controls.Add(box); } private void PictureClick(object sender, EventArgs e){ // how do I get the one that has been clicked and set its border color } 

Comment obtenir celui qui a été cliqué et définir sa couleur de bordure?

sender est le PictureBox lequel vous PictureBox cliqué:

 private void PictureClick(object sender, EventArgs e) { PictureBox oPictureBox = (PictureBox)sender; // add border, do whatever else you want. } 

Le paramètre sender est bien votre PictureBox , downcast to object. Accédez-y de cette façon:

 var pictureBox = sender as PictureBox; 

Dessiner une bordure autour de celle-ci ne pourrait pas être aussi facile car vous devrez soit remplacer la méthode OnPaint de PictureBox, soit gérer l’événement Paint .

Vous pouvez utiliser cette classe pour dessiner une bordure noire fine autour de votre image.

 public class CustomBorderPictureBox : PictureBox { public bool BorderDrawn { get; private set; } public void ToggleBorder() { BorderDrawn = !BorderDrawn; Invalidate(); } protected override void OnPaint(PaintEventArgs pe) { base.OnPaint(pe); if (BorderDrawn) using (var pen = new Pen(Color.Black)) pe.Graphics.DrawRectangle(pen, 0, 0, Width - 1, Height - 1); } }