Ciao a tutti. Ho un problema: dovrei disegnare un cerchio (o più di uno) in una PictureBox che si trova in un form e che conterrà un'immagine (selezionata con una OpenFileDialog).
La cosa che faccio è la seguente:
1) Intercetto l'evento del mouse (Mouse Enter) quando il cursore del mouse si trova nella PictureBox:
...
//variabili private definite nel codice C# del Form
private int StartX, StartY, EndX, EndY;
private bool bFlagMouseMove = false;
private bool bFlagMouseEnter = false;
private bool bFlagMouseDown = false;
// Dalla Guida MSDN
// -------------------------------------------------
// Mouse events occur in the following order:
// MouseEnter
// MouseMove
// MouseHover/ MouseDown/ MouseWheel
// MouseUp
// MouseLeave
//:. Occurs when the mouse pointer enters the control.
private void PictureBoxPreview_MouseEnter(object sender, EventArgs e)
{
this.label2.Text = sender.GetType().ToString() + ": MouseEnter";
this.bFlagMouseEnter = true;
}
2) Intercetto l'evento Mouse Down quando clicco il tasto sx del mouse:
//:. Occurs when the mouse pointer is over the control and a mouse button is pressed
private void PictureBoxPreview_MouseDown( object sender, MouseEventArgs e )
{
this.PictureBoxPreview.Cursor = Cursors.Cross;
if ( this.bFlagMouseEnter )
{
this.bFlagMouseDown = true;
//salvo le coordinate del mouse in 2 variabili
this.StartX = e.X;
this.StartY = e.Y;
this.LabelTrackBarZoomValue.Text = this.StartX + " " + this.StartY; //prova....
}
}
3) Intercetto l'evento MouseMove quando muovo il mouse:
//:. Occurs when the mouse pointer is moved over the control.
private void PictureBoxPreview_MouseMove(object sender, MouseEventArgs e)
{
this.label2.Text = sender.GetType().ToString() + ": MouseMove"; //prova....
if ( this.bFlagMouseEnter )
{
//ho premuto un tasto del mouse e precisamente quello sx
if ( this.bFlagMouseDown && e.Button == MouseButtons.Left )
{
this.LabelTrackBarZoomValue.Text = this.EndX + " " + this.EndY;
this.EndX = e.X;
this.EndY = e.Y;
}
}
}
4) Definisco gli eventi che intercettano il MouseUpe il MouseLeave;
Quando c'è un evento MouseUp, dovrei disegnare il cerchio sulla PictureBox, ma, pur calcolando le coordinate iniziali e finali, per poter visualizzare il cerchio disegnato, devo muovere le scrollbar del pannello che contiene la PictureBox, altrimenti non si vede il cerchio disegnato. Come posso effettuare una "redraw" dell'immagine in modo tale da risolvere questo problema? Qualcuno potrebbe spiegarmi dove sbaglio? Grazie in anticipo per le risposte...