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
Post a Comment