Press "Enter" to skip to content

Come interagire con una picturebox creata a runtime al passaggio o al click del mouse

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.

UI01

Nella Form1 generata automaticamente dal nuovo progetto Windows forms di Visual Studio 2015 ho inserito i seguenti controlli:

design_01

  1. flowLayoutPanel1 – ingrandito e a cui ho impostato la property Anchor a Left, Top, Right,Bottom in modo che occupi tutto lo spazio disponibile.
  2. label1 e label2 che contengono i titoli accanto alle textbox
  3. 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
  4. 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: