I am trying to create this simple application in c#: when the user double clicks on specific location in the form, a little circle will be drawn. By one click, if the current location is marked by a circle – the circle will be removed.
I am trying to do this by simply register the MouseDoubleClick and MouseClick events, and to draw the circle from a .bmp file the following way:
private void MouseDoubleClick (object sender, MouseEventArgs e)
{
Graphics g = this.CreateGraphics();
Bitmap myImage = (Bitmap)Bitmap.FromFile("Circle.bmp");
g.DrawImage(myImage, e.X, e.Y);
}
My problem is that I dont know how to make the circle unvisible when the user clicks its location: I know how to check if the selected location contains a circle (by managing a list of all the locations containig circles…), but I dont know how exactly to delete it.
Another question: should I call the method this.CreateGraphics() everytime the user double-clicks a location, as I wrote in my code snippet, or should I call it once on initialization?
My personal preference is to put my images in instances of the
Pictureboxclass. Reason being, I can simply call each Picturebox’sHide()function (or set ‘Visible` to false).What you’re doing is drawing directly onto the window’s client area, which technically isn’t wrong but normally should be done in the form’s Paint handler. If at some point you decide you don’t want your circle to be visible anymore, you can call the form’s
Invalidate()method which triggers the Paint event. There, you explicitly do not draw your circle, and so to the user, the circle disappears.The nice thing about a Picturebox is that it’s persistent – you put your image into it and optionally draw on that image, but you only need to draw once. If you use the Paint handler technique, your drawing code gets called each time the form needs to redraw itself.
Edit:
Here’s some code that illustrates my Paint handler information:
If you’re drawing bitmaps, I would load the bitmap once and store it as a class variable. This way you don’t need to hit the hard drive each time you want to draw. Dispose of the bitmap when you dispose of your class (in this case, your window).