Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单击两个新点,并使用鼠标事件在这两个点之间绘制一条线_C#_Events_Graphics_Gdi+ - Fatal编程技术网

C# 单击两个新点,并使用鼠标事件在这两个点之间绘制一条线

C# 单击两个新点,并使用鼠标事件在这两个点之间绘制一条线,c#,events,graphics,gdi+,C#,Events,Graphics,Gdi+,有没有建议如何通过单击两个新点然后在它们之间画一条线来创建一条线? 我正在尝试创建一个类似于AdobeAcrobat中的距离工具 图像示例 您可以在面板上处理鼠标单击事件(例如)并检索单击位置(使用事件参数)。将此位置存储在属性中。你需要多少分就做多少分。 在“面板绘制”事件中,调用父绘制,然后在点之间绘制线。类似的操作应该可以: Point firstPoint; Point seondPoint; private void panel1_MouseDown(object sender, M

有没有建议如何通过单击两个新点然后在它们之间画一条线来创建一条线? 我正在尝试创建一个类似于AdobeAcrobat中的距离工具

图像示例


您可以在面板上处理鼠标单击事件(例如)并检索单击位置(使用事件参数)。将此位置存储在属性中。你需要多少分就做多少分。
在“面板绘制”事件中,调用父绘制,然后在点之间绘制线。

类似的操作应该可以:

Point firstPoint;
Point seondPoint;

private void panel1_MouseDown(object sender, MouseEventArgs e)
{
    if (this.firstPoint == null) {
        this.firstPoint = e.Location;
    }

    if (this.secondPoint == null) {
        this.secondPoint = e.Location;
    }

    panel1.Invalidate();
}

private void panel1_Paint_1(object sender, PaintEventArgs e)
{       
    Using (pn as new Pen(Color.Blue, 5))
    {
        e.Graphics.DrawLine(pn, firstPoint, secondPoint);
    }
}

编辑:你也不需要做
CreateGraphics
来画线-在绘画事件中,你已经有了一个图形对象。

问题解决了

编辑: 代码如下:

private Point p1, p2;
List<Point> p1List = new List<Point>();
List<Point> p2List = new List<Point>();

    private void Panel1_MouseDown(object sender, MouseEventArgs e)
    {
        if (p1.X == 0)
        {
            p1.X = e.X;
            p1.Y = e.Y;
        }
        else
        {
            p2.X = e.X;
            p2.Y = e.Y;

            p1List.Add(p1);
            p2List.Add(p2);

            Invalidate();
            p1.X = 0;
        }
    }

    private void Panel1_Paint(object sender, PaintEventArgs e)
    {
        using(var p = new Pen(Color.Blue, 4))
        {
            for(int x = 0; x<p1List.Count; x++){
                e.Graphics.DrawLine(p, p1List[x], p2List[x]);
            }
        }
    }
专用点p1、p2;
List p1List=新列表();
List p2List=新列表();
专用无效面板1\u鼠标向下(对象发送方,鼠标目标e)
{
如果(p1.X==0)
{
p1.X=e.X;
p1.Y=e.Y;
}
其他的
{
p2.X=e.X;
p2.Y=e.Y;
p1列表。添加(p1);
p2List.Add(p2);
使无效();
p1.X=0;
}
}
私有void panel 1_Paint(对象发送器,PaintEventArgs e)
{
使用(var p=新笔(颜色:蓝色,4))
{

对于(int x=0;x此代码只是告诉我从a点到b点画一条线。你的问题中的第一条线要求什么?正如你从代码中看到的,我在那里画了两条线。我希望第一条线是一个点,然后是第二条线。然后我想把它们连接在一起,创建一条真正的线。你在使用Adobe PDF Reader吗?如果是这样的话,试着看看它的距离工具功能。你不应该使用
Panel1.CreateGraphics()
,而应该使用面板的
on paint
方法。@thecloudesssky该示例是关于MouseDown()事件的。我知道。你应该做的是“当鼠标移动时,设置对象的位置”这意味着您可以移动点、线、形状等等。然后在该方法的末尾调用
Refresh()
以使控件重新绘制。绘制方法由
OnPaint()
处理。这是(OnPaint)的位置你画所有的东西。你选择当前的位置并画它们。看看我在另一篇文章中的回答,看看我的意思。如果你在控件上绘制,你不应该在事件期间调用
CreateGraphics()