c# - Call paint event from mouse move event -


when mouse move on panel2, need draw lines. far have done following

public form1() {                initializecomponent();              }  private void panel2_paint(object sender, painteventargs e) {     if (isdragging)     {         letspaint(sender, e);     } }  private void panel2_mousemove(object sender, mouseeventargs e) {     if (isdragging)      {         mousemovex = e.x;         mousemovey = e.y;                                        this.paint += new painteventhandler(panel2_paint);     } }  private void letspaint(object sender, painteventargs e)  {                  pen blackpen = new pen(color.black, 3);     graphics g = e.graphics;     g.drawline(blackpen, mouseclickedx, mouseclickedy, mousemovex, mousemovey);     g.dispose();  } 

but nothing happens when move mouse. think did wrong painteventhandler() here. please tell me how , if there better way this.

also think method drawline on form need draw line on panel2. how do? in advance.

you invalidate:

public form1() {              initializecomponent();               panel2.paint += new letspaint; }  private void panel2_mousemove(object sender, mouseeventargs e) {   if (isdragging) {     mousemovex = e.x;     mousemovey = e.y;                                    panel2.invalidate();   } } 

and don't dispose graphic object (you didn't create it), pen:

private void letspaint(object sender, painteventargs e) {                using (pen blackpen = new pen(color.black, 3)) {     e.graphics.drawline(blackpen,                          mouseclickedx, mouseclickedy, mousemovex, mousemovey);   } } 

here quick little method works bitmap:

bitmap bmp; point lastpoint;  public form1() {   initializecomponent();   bmp = new bitmap(panel1.clientsize.width, panel1.clientsize.height,                     system.drawing.imaging.pixelformat.format32bpppargb);    panel1.mousedown += panel1_mousedown;   panel1.mousemove += panel1_mousemove;   panel1.paint += panel1_paint; }  void panel1_paint(object sender, painteventargs e) {   e.graphics.drawimage(bmp, point.empty); }  void panel1_mousemove(object sender, mouseeventargs e) {   if (e.button == mousebuttons.left) {     using (graphics g = graphics.fromimage(bmp)) {       g.drawline(pens.black, lastpoint, e.location);     }     lastpoint = e.location;     panel1.invalidate();   } }  void panel1_mousedown(object sender, mouseeventargs e) {   lastpoint = e.location; } 

this flicker, want replace panel double-buffered panel. this:

public class panelex : panel {   public panelex() {     this.doublebuffered = true;   } } 

Comments

Popular posts from this blog

ios - iPhone/iPad different view orientations in different views , and apple approval process -

php - HTTP_REFERER woes: How can I allow access to a specific page, only when a visitor has visited another specific page beforehand? -

java Extracting Zip file -