如何在WinForms中绘制形状我正在尝试编写一个类似于绘画的程序。您可以通过选择所需的形状来绘制填充形状,单击图片框并拖动鼠标以获得所需的大小。但是当我拖动时会发生这种情况。当我使用refresh();,形状-先前绘制-删除自身。我应该怎么做才能绘制填充形状?privatevoidCizimPicture_MouseDown(objectsender,MouseEventArgse){Cursor=Cursors.Cross;如果(e.Button==MouseButtons.Left){cizim=true;}X1=eX;Y1=eY;}privatevoidCizimPicture_MouseUp(objectsender,MouseEventArgse){Cursor=Cursors.Default;西齐姆=假;}privatevoidCizimPicture_MouseMove(objectsender,MouseEventArgse){if(!cizim)return;如果(cizim==true){X=eX;Y=eY;X2=(eX-X1);Y2=(Y1-eY);如果(dikd?rtgen==true){resmim.FillRectangle(renk.Brush,X1,Y1,X2,-Y2);}if(elips==true){resmim.FillEllipse(renk.Brush,X1,Y1,X2,-Y2);我寻找简单且有效的示例代码,但一无所获。您不需要屏幕外位图或CreateGraphics,但您需要处理跟踪鼠标位置、绘制到屏幕以及将绘制的形状添加到Eric建议的形状列表中。要处理交互式绘图,您需要在表单处理程序中存储鼠标状态、初始点击位置和当前矩形:boolmouseDown;点clickPos;长方形;然后当用户点击时,记住初始位置:privatevoidMouseDown(objectsender,MouseEventArgse){mouseDown=true;clickPos=e.Location;rect=newRectangle(clickPos,newSize(0,0));}当用户拖动鼠标时,创建一个包含开始位置和当前位置的矩形:privatevoidMouseMove(objectsender,MouseEventArgse){if(mouseDown){this.Invalidate(rect);if(e.Location.X>clickPos.X&&e.Location.Y>clickPos.Y){rect=newRectangle(clickPos.X,clickPos.Y,e.Location.X-clickPos.X,e.Location.Y-点击位置Y);}elseif(e.Location.X>clickPos.X&&e.Location.YclickPos.Y){rect=newRectangle(e.Location.X,clickPos.Y,clickPos.X-e.Location.X,e.Location.Y-clickPos.Y);}这个无效(矩形);}}当用户释放鼠标时,停止绘制:privatevoidMouseUp(objectsender,MouseEventArgse){mouseDown=false;Windows窗体中最重要的第一条规则是:仅在Paint事件中绘制到屏幕。切勿在MouseMoved事件中绘制:privatevoidPaint(objectsender,PaintEventArgse){e.Graphics.FillRectangle(Brushes.DarkGray,rect);完成后,创建一个表单List并添加当前矩形,并在Paint事件中绘制所有矩形。您还可以在MouseMoved中进行一些优化,以仅使更改的屏幕区域无效,而不是使新旧矩形无效。以上就是《C#学习教程:如何在WinForms中绘制形状》的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处:
