Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.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在两条直线之间绘制链接或路径#_C#_Winforms_Gdi+_System.drawing - Fatal编程技术网

C# 使用c在两条直线之间绘制链接或路径#

C# 使用c在两条直线之间绘制链接或路径#,c#,winforms,gdi+,system.drawing,C#,Winforms,Gdi+,System.drawing,我试图在两条线之间画一条路径,如下所示 我使用下面的代码来实现这一点 Pen usedpen= new Pen(Color.Black, 2); //Point[] p = { // new Point(518,10), // new Point(518,20), // new Point(518-85,15) //}; GraphicsPath path = ne

我试图在两条线之间画一条路径,如下所示

我使用下面的代码来实现这一点

        Pen usedpen= new Pen(Color.Black, 2);
        //Point[] p = {
        //    new Point(518,10),
        //    new Point(518,20),
        //    new Point(518-85,15)
        //};
        GraphicsPath path = new GraphicsPath();

        path.StartFigure();
        path.AddLine(new Point(518, 10), new Point(433, 10));
        path.AddLine(new Point(518, 40), new Point(433, 40));
        path.AddLine(new Point(433,10), new Point(433,40));
        //usedpen.LineJoin = LineJoin.Round;
        e.Graphics.DrawPath(usedpen, path);
但使用此代码后,将绘制以下图形:

有什么帮助吗

提前感谢

哦,您正在使用onPaint事件,所以问题是您正在绘制一条路径,这意味着该点将从第一行的末尾到下一行的开头

在第一行之后

path.AddLine(新点(518,10),新点(433,10))

现在点在(433,10)

现在下一行是从(518,40)到(433,40)

现在实际发生的是有一条从(433,10)到(518,40)的线,因为这是一条它继续绘制的路径

 GraphicsPath path = new GraphicsPath();
 path.StartFigure();
 path.AddLine(new Point(518, 10), new Point(433, 10));
 path.AddLine(new Point(433, 10), new Point(433, 40));
 path.AddLine(new Point(433, 40), new Point(518, 40));
 usedpen.LineJoin = LineJoin.Round;

哦,您正在使用onPaint事件,所以问题是您正在绘制一条路径,这意味着该点将从第一行的末尾到下一行的开头

在第一行之后

path.AddLine(新点(518,10),新点(433,10))

现在点在(433,10)

现在下一行是从(518,40)到(433,40)

现在实际发生的是有一条从(433,10)到(518,40)的线,因为这是一条它继续绘制的路径

 GraphicsPath path = new GraphicsPath();
 path.StartFigure();
 path.AddLine(new Point(518, 10), new Point(433, 10));
 path.AddLine(new Point(433, 10), new Point(433, 40));
 path.AddLine(new Point(433, 40), new Point(518, 40));
 usedpen.LineJoin = LineJoin.Round;

默认情况下,每当您添加一个图形时,假设一条线到GraphicPath,它的起点将连接到最后一个图形的终点。因此,顺序很重要

防止这种情况的方法是,无论何时要绘制未连接的线,都要使用它:

在不关闭当前地物的情况下启动新地物。所有后续地物 添加到路径的点将添加到此新地物

penusedpen=新笔(Color.Black,2);
//点[]p={
//新点(518,10),
//新点(518,20),
//新点(518-85,15)
//};
GraphicsPath路径=新的GraphicsPath();
path.StartFigure();
AddLine(新点(518,10),新点(433,10));

path.StartFigure();// 默认情况下,每当您添加一个图形时,假设一条线到GraphicPath,它的起点将连接到最后一个图形的终点。因此,顺序很重要

防止这种情况的方法是,无论何时要绘制未连接的线,都要使用它:

在不关闭当前地物的情况下启动新地物。所有后续地物 添加到路径的点将添加到此新地物

penusedpen=新笔(Color.Black,2);
//点[]p={
//新点(518,10),
//新点(518,20),
//新点(518-85,15)
//};
GraphicsPath路径=新的GraphicsPath();
path.StartFigure();
AddLine(新点(518,10),新点(433,10));
path.StartFigure();// 一种类似的方法,使用(也处理创建的对象)。

未使用,因为它是唯一绘制的图形。将更多点添加到GraphicsPath时,
.StartFigure()
将创建一个新的子路径,而不链接预先存在的子路径。

可以使用解析子路径,以测试它们包含的形状类型。

一种类似的方法,使用(也处理创建的对象)。

未使用,因为它是唯一绘制的图形。将更多点添加到GraphicsPath时,
.StartFigure()
将创建一个新的子路径,而不链接预先存在的子路径。

可以使用解析子路径,以测试它们包含的形状类型。


你用什么作为画布?我不使用画布你用什么作为画布?我不使用画布抱歉如果解释是messyNo,我理解你的解释,它是有效的,谢谢兄弟抱歉如果解释是messyNo,我理解你的解释,它是有效的,谢谢兄弟
using (GraphicsPath path = new GraphicsPath())
{
    Point[] points = new Point[] {
        new Point(518, 10), new Point(433, 10),
        new Point(433, 40), new Point(433, 40),
        new Point(433, 40), new Point(518, 40)
    };

    path.AddLines(points);
    e.Graphics.DrawPath(new Pen(Color.Black, 2), path);

    //Add a new figure
    path.StartFigure();
    path.AddEllipse(new Rectangle(450, 40, 50, 50));
    e.Graphics.DrawPath(new Pen(Color.Black, 2), path);
};