请教,C# winform根据鼠标移动画多条直线

各位大佬,麻烦帮我看看哪里不对劲,根据MouseDowm、MouseMove、MouseUp画下直线,但再画另一条之前画的一条就消失了。请教怎么画多条直线?只画直线就行
private void panel1_MouseDown(object sender, MouseEventArgs e)
{
if(startDraw)
{
startpoint.X=e.X;
startpoint.Y= e.Y;
sdraw = true;
}
}

    private void button3_Click(object sender, EventArgs e)
    {
        startDraw = false;
    }
            private void button1_Click_1(object sender, EventArgs e)
    {
        startDraw = true;//点击按钮鼠标处于画线状态
    }

    private void panel1_MouseUp(object sender, MouseEventArgs e)
    {
        if (startDraw)
        {
            sdraw = false ;
        }
    }

    private void panel1_MouseMove(object sender, MouseEventArgs e)
    {
        if (startDraw)
        {
            if (sdraw)
            {
                currentpoint.X = e.X;
                currentpoint.Y = e.Y;
                Refresh();
            }
        }
                    private void panel1_Paint(object sender, PaintEventArgs e)
    {
        Graphics newgraphics = e.Graphics; 
        Rectangle r = new Rectangle(0, 0, 795, 400);//是创建画矩形的区域 
        newgraphics.DrawRectangle(Pens.Red, r);
        if (sdraw && startDraw)
        {
            newgraphics.DrawLine(p, startpoint, currentpoint);
        }
    }
0

1个回答

将画线的起始点和结束点保存下来,下次画线的时候将之前所画线重新绘制出来,笨办法,不要吐槽

 bool startDraw = true;
        bool sdraw = false;
        private Point currentpoint = new Point();
        private Point startpoint = new Point();
        private Pen p = new Pen(Color.Red, 12);
        List<Point> startPoints = new List<Point>();
        List<Point> endPoints = new List<Point>();
        public Form1()
        {
            InitializeComponent();
        }
        private void panel1_MouseDown(object sender, MouseEventArgs e)
        {
            if (startDraw)
            {
                startpoint.X = e.X;
                startpoint.Y = e.Y;
                startPoints.Add(startpoint);
                sdraw = true;
            }
        }
        private void button3_Click(object sender, EventArgs e)
        {
            startDraw = false;
        }
        private void button1_Click_1(object sender, EventArgs e)
        {
            startDraw = true;//点击按钮鼠标处于画线状态
        }

        private void panel1_MouseUp(object sender, MouseEventArgs e)
        {
            if (startDraw)
            {
                endPoints.Add(currentpoint);
                sdraw = false;
            }
        }

        private void panel1_MouseMove(object sender, MouseEventArgs e)
        {
            if (startDraw)
            {
                if (sdraw)
                {
                    currentpoint.X = e.X;
                    currentpoint.Y = e.Y;
                    Refresh();
                }
            }
        }
        private void panel1_Paint(object sender, PaintEventArgs e)
        {
            Graphics newgraphics = e.Graphics;
            Rectangle r = new Rectangle(0, 0, 795, 400);//是创建画矩形的区域 
            newgraphics.DrawRectangle(Pens.Red, r);
            if (sdraw && startDraw)
            {
                for (int i = 0; i < startPoints.Count; i++)
                {
                    if (i<endPoints.Count)
                    {
                        newgraphics.DrawLine(p, startPoints[i], endPoints[i]); 
                    }
                }
                newgraphics.DrawLine(p, startpoint, currentpoint);
            }
        }
0
wojteck
逸尘向天 能成功就行,十分感谢大佬
3 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C#带背景绘图,拖鼠标画矩形和直线
C#的pictureBox上绘图,带背景,有橡皮筋效果,实现画矩形和直线,图片可保存。 开发环境:Visual Studio 2012(.net framework 4.5)
绘制平滑线条的winform窗体
protected override void OnPaint(PaintEventArgs e)         {             try             {                 Graphics g = e.Graphics;//获取绘制对象                 ///设置参数                 g.SmoothingMode
C# GDI+ 画简单的图形:直线、矩形、扇形等
GDI+是一种绘图装置接口,  当拖动窗体是,窗体发生移动,window默认为从窗体移动到另一个地方,先发生擦除后再重新画一个窗体; 而我们自己动手画的图(如下面的线),不会重新画;在属性中,Paint,中,将画图的程序重新写一遍就可实现重画。 画一条线         private void button1_Click(object sender, EventArgs e)
c#用鼠标画直线的简单实现
c# 用鼠标利用GDI+灵活在图片框picturebox中画直线,欢迎大家相互交流
c#GDI+实现用鼠标画矩形
要求:设计一个根据鼠标来绘制矩形框的程序,即当按下鼠标左键并拖动至某个位置后释放鼠标使,可根据按下鼠标时的第一个点和释放鼠标时的第二个点来确定并绘制该矩形。设计思路:1.首先得到首次鼠标点击的位置 ,然后再得到鼠标在最后得到的位置。2.我们就需要返回值得到(x2-x1)的值,还有(y2-y1)的值3.我们在后台调动GDI+,将图像画出来。实现步骤。1.首先用鼠标的事件MouseDown、Mouse...
C#,winform,gdi+,简单实现鼠标拉出虚线框,适合新手
按下鼠标拖动就能拉出虚线框,先看效果图: 实现原理: 利用窗体的三个鼠标事件,按下,移动和释放。按下鼠标时,记录按下的坐标,按住移动时根据移动的位置计算长宽,用gid+画虚线框,显示到窗体上。松开鼠标时画一张透明图像清除上面的痕迹,方框消失。 关键代码: //鼠标按下事件 private void Form1_MouseDown(object s
C# 对直线进行拖动操作
主要包括了:自定义的直线控件 和 使用该控件的例子,主要是方便大家学习参考,并配有文档注释说明
C#实现在控件上画直线
C#实现在winform控件上画线。e.Graphics.DrawLine画直线。可调颜色,粗细
C# 根据一条直线的两个端点坐标画箭头的方法
C# 根据一条直线的两个端点坐标画箭头的方法
C#中winform画直线
C#中画直线,按确定按钮,可以按照预定的路线,画一条直线。
Winform中,坐标信息块、十字交叉线或其它控件随着鼠标移动的性能比较之小谈!
总觉得对去年的一个项目使用的一些技术耿耿于怀,很多并不是技术上的问题,因为我们知道,有时候技术会成为RMB的炮灰,总感觉没有什么比较的!在十几年前,我听得最多得是,Java是大项目的,.net是小项目的,什么设计模式呀,手游前景,B2B呀,协议通信呀,外企项目呀,面向对象/组件/过程呀,PCB板,SIM,生产工艺,平台开发,SaaS....等,现在又听到什么微信小程序呀,GOOGLE小程序呀,微信
c# GDI+画图用鼠标绘制直线、矩形、椭圆
用鼠标绘制直线、矩形、椭圆,填充图形。 旋转,平移、缩放图片
C# GDI+ 设计一个根据鼠标来绘制矩形框的程序
问题描述:设计一个根据鼠标来绘制矩形框的程序,即当按下鼠标左键并拖动至某个位置后释放鼠标使,可根据按下鼠标时的第一个点和释放鼠标时的第二个点来确定并绘制该矩形。问题分析:1.获取在画矩形时起始点的鼠标点击坐标和结束点的鼠标坐标;2.根据两点算出矩形的长和宽;3.调用DrawRectangle画出矩形。具体实现:using System; using System.Collections.Gen...
关于Winform中类似股票K线图十字交叉线随着鼠标移动的实现方法!
有一个项目组这段时间主要多为MFC及Winform类型的项目,主要从技术面而言而已,否则这个项目组的成本也忒高了,......还是记录一段时间的桌面应用知识吧!       今天主要分享一下一个实习生解决一套大型系统中的一个功能模块之分析模块的类似股票十字交叉线的实现方法,哈哈,我的心态也是实习心态哦!-_-!       我们知道在winform中,无论其VB、C#、J#等,还是其它技术或语
C# WinForm中 DrawLine 如何画一条平滑的直线。。抗锯齿
在C#中,默认的直线式很难看的。锯齿严重。 如图: 代码如下:            //创建一个Graphics对象            Graphics grp = CreateGraphics();            //绘制线条 起始窗口坐标10,50 终止坐标20,350 红色,2px宽            grp.DrawLine(new Pen(Color....
C#绘制直线与箭头
C#绘制箭头和PDF里面的箭头一样,并不是用系统自带的箭头画的。
[ C#学习日常 ] Graphics绘线擦除问题
设有两个点point1与point2Point point1=new Point(0, 0); Point point2=new Point(200,200);使用 Graphics 画板以及 DrawLine 可以两点之间的绘制一条线段using (Graphics graphics = this.CreateGraphics())     {         graphics.DrawLine...
c# 真正的线控件(直线、斜线)而且不会遮盖
C# 编写的真正线控件。在网上找到的大部分都没有处理两个线相交情况互相遮盖的部分。 这次我利用GDI+ 的异形把线控件遮盖部分去掉,变成完全的线控件,添加后可以拖动还可以改变大小方向。而且多个线相交,只有相交部分重叠,其他部分都可以看到。 类似VB里面的线控件。
【实例】html5-canvas通过鼠标绘制线段
body { background: #eeeeee; } #controls { position: absolute; left: 25px; top: 25px; } #canvas { background: #ffffff; cursor: pointer; mar
采用Qt快速绘制多条曲线(折线),跟随鼠标动态显示线上点的值(基于Qt的开源绘图控件QCustomPlot进行二次开发)...
采用Qt快速绘制多条曲线(折线),跟随鼠标动态显示线上点的值(基于Qt的开源绘图控件QCustomPlot进行二次开发) QCustomPlot是一个开源的基于Qt的第三方绘图库,能够绘制漂亮的2D图形。 QCustomPlot的官方网址:https://www.qcustomplot.com/ 从官网下载QCustomPlot的源文件,包括qcustomplot.h和qcustomplot...
C#在界面画分隔线的小技巧
本想在C#中画一条分隔线的,发现没有现成的直线之类的,就像没有圆形的指示灯一样,百度出来的很多都是说自己调用Graphics对象画一条,感觉有点麻烦。 后面发现一个小技巧,用Label控件做,具体方法如下:拖一个Label标签控件,然后将其属性中的AutoSize设置为False(这样就可以手动设置大小了),再将Size尺寸中的大小第二个参数高度设置为2,宽度设置为你想要的大小,最后把Bor...
C# winform GDI 绘图板 源码 可实现铅笔绘图,直线、圆、椭圆、矩形绘图、可调整颜色、线宽,结构清晰,适合初学者研究
C# winform GDI 绘图板 源码 可实现铅笔绘图,直线、圆、椭圆、矩形绘图、可调整颜色、线宽,结构清晰,适合初学者研究
vc 鼠标移动画直线
如果在鼠标移动事件中直接调用lineto是不行的,因为上次画的线不会消失,回出现一片直线。正确的做法是去掉上次画的直线。代码如下 CDC *pcdc=this->GetDC(); CPen newPen(PS_SOLID,1,RGB(255,0,0)); CPen *pOldePen; pcdc->SelectStockObject(NULL_BRUSH); pOldePen=pcdc-
python利用算法库画出的直线
import numpy as np from numpy import * import matplotlib.pyplot as plt # 测试数据集-二维 list dataSet = [[-0.017612,14.053064],[-1.395634 ,4.662541],[-0.752157 ,6.538620],[-1.322371 ,7.152853],[0.423363 ,...
C# 在winform的Panel上画出一组数据点的图像
C# 在winform的Panel上画出一组数据点的图像,提供三种画图方法:点图、线图、阶梯图
WinForm下波形图的绘制
需求:  1. 数据比较大(百万级别); 2. 同时显示多条波形曲线 实现 1. msChart 数据太大,直接挂掉 2. DotNetBar中的MicroChart 只能显示单条曲线,不符合要求 3. ZedGraph 能显示多条曲线,能绘制小数据,大数据直接挂掉 4. NI的WaveFormGraph 可以实现需求,但是部署太麻烦-。- 继续寻求ing 求一种
vtk随鼠标运动实时画直线
#include &amp;lt;vtkRenderWindow.h&amp;gt; #include &amp;lt;vtkRenderWindowInteractor.h&amp;gt; #include &amp;lt;vtkRenderer.h&amp;gt; #include &amp;lt;vtkSphereSource.h&amp;gt; #include &amp;lt;vtkPolyDataMapper.h&amp;gt; #includ...
GDI+ 动态绘制直线
绘制直线的语句其实非常简单: newgraphics.DrawLine(new Pen(Color.Black), startPoint, new PointF(e.X, e.Y)); 但是直接使用DrawLine函数,绘制的直线不能看到绘制过程,所以应该进行优化。 1. 我们在程序中使用一个pictureBox控件 2. 我们在主类中定义需要全局使用的变量
C# 画线,鼠标轨迹等源码
实现了画固定图形,以及跟踪鼠标移动轨迹。按住鼠标左键在规定区域内移动鼠标即可画出任意图形。
dotnetCHARTING winform画报表-柱状图(多柱)-折线图(多线条)-饼图 三个例子
dotnetCHARTING winform画报表-柱状图(多柱)-折线图(多线条)-饼图 三个例子
canvas动态划线(canvas跟随鼠标变幻线条...)
canvas动态划线(canvas跟随鼠标变幻线条,知乎登录页面动态线条背景动画代码)
c# 画曲线图,多条曲线显示
c# 画曲线,x坐标可以变化,y坐标可变,多条曲线共同显示,不同颜色的曲线,有图标
VTK 鼠标画线(点移动线可同步更新)
鼠标交互事件:点两个点形成一条线 通过鼠标点两个点,同时标记这两个点,形成一条线。(只有一条线,并不是每次点两个点都会新出现一条线) 这个版本是个初级版本,(后面我也实现了任意拖动一个点,直线会相应发生变化,以及两点在Z轴上的变动,线也会同步更新)。代码太多所以我也没有贴上来,有需要了我会发出来! double point1[3]{ 0 };double point2...
OpenGL::让我们画几条线
看了OpenGLES已经有一段时间了,大致对这个3D库有了一些了解,之后就开始对这套API进行一下深入的研究学习。 学习主要是通过《计算机图形学》一书开展的,网上有什么红宝书蓝皮书什么的回头再看吧,学习要专注,你懂得。首先要先了解一下GL和GLUT的概念,自己详细Google下,总之你得先了解你所要用的库以及库的功能,在这里简单提一下,GL是3D库的主要API框架,而GLUT则是一些工具,我们在x
GMAP.NET 画直线
GMAP.NET 画直线
ZedGraph实时显示多条曲线
根据ZedGraph.dll,做的一个显示多条实时曲线的例子。给大家提一个思路。用VS2008编译完成。
GDI+ 绘制矩形、箭头、圆形、线
GDI+ 绘制矩形、箭头、圆、线,可以选择画笔颜色、画笔宽度、图形随鼠标移动并且可拉伸。
C#画多条二维曲线C#画多条二维曲线
C#画多条二维曲线C#画多条二维曲线C#画多条二维曲线
C#Winform中运用DevExpress提供的ChartControl控件绘制多条曲线图
首先添加引用: using DevExpress.XtraCharts; 具体代码如下,点击button触发: private void btn_spine_Click(object sender, EventArgs e) { ChartControl spineChart = new ChartControl();
用数学方法解决工程问题系列(一) 在Winform里画旋转矩形
最近项目上设计了一套自动化小车的交通控制方案,其中最主要的是行进锁闭区的分配(包括直行、转弯、斜行、U型转弯等)和车辆防撞设计。为了更直观地检验方案的输出、演示方案的设计效果,花了点时间做了一套UI界面,效果是这样的:其中蓝色有数字在身上的是自动小车,深色一头为车头。黄色为申请的锁闭区,也即当前车速下的安全锁定区域。车辆直行时:车辆转弯时:车辆的实时信息:下面分开几篇介绍其中的主要思路和核心代码。本