In risposta ad un thread sul forum italiano di sviluppo desktop, in cui come da titolo un principiante chiedeva come poter interagire con delle picturebox generate a runtime, ho creato un programmino che dimostra come intercettare gli eventi Mouse Click e Mouse Hover sui controlli picturebox generati a runtime.
Nella Form1 generata automaticamente dal nuovo progetto Windows forms di Visual Studio 2015 ho inserito i seguenti controlli:
- flowLayoutPanel1 – ingrandito e a cui ho impostato la property Anchor a Left, Top, Right,Bottom in modo che occupi tutto lo spazio disponibile.
- label1 e label2 che contengono i titoli accanto alle textbox
- txtClickinfo – una textbox con la proprietà Anchor a Left, Right, Bottom, in modo che si allarghi in orizzontale e non si sposti cambiando la forma della window
- txtHoverInfo – identica alla prima per forma e property.
Fatto questo nel codice dell’evento Load della form ho scritto:
private void Form1_Load(object sender, EventArgs e) { PictureBox box = new PictureBox(); box.Image = Properties.Resources.Add; box.SizeMode = PictureBoxSizeMode.AutoSize; box.MouseClick += Box_MouseClick; box.MouseHover += Box_MouseHover; box.Name = "AddImage"; flowLayoutPanel1.Controls.Add(box); box = new PictureBox(); box.Image = Properties.Resources.Arrow_Right; box.SizeMode = PictureBoxSizeMode.AutoSize; box.MouseClick += Box_MouseClick; box.MouseHover += Box_MouseHover; box.Name = "ArrowRight"; flowLayoutPanel1.Controls.Add(box); ... ometto le ulteriori picturebox in cui varia solo l'immagine }
Ho creato una serie di picturebox e le ho inserite nel flow layout panel che automaticamente le posiziona in righe e colonne e come potete notare, ho agganciato 2 event handler MouseClick e MouseHover per ognuna delle picturebox.
private void Box_MouseHover(object sender, EventArgs e) { PictureBox box = sender as PictureBox; if (box != null) { txtHoverInfo.Text = string.Format("You have hovered {0}", box.Name); } } private void Box_MouseClick(object sender, MouseEventArgs e) { PictureBox box = sender as PictureBox; if (box != null) { txtClickInfo.Text = string.Format("You have clicked {0}", box.Name); } }
Il codice degli event handler che scrivono nelle textbox il nome dell’immagine su cui si trova il mouse o su cui è stato fatto click.
Potete scaricare il progetto esempio dal link qui indicato: