C# 在WinForms picturebox中绘制多条曲线

C# 在WinForms picturebox中绘制多条曲线,c#,winforms,drawing,draw,C#,Winforms,Drawing,Draw,我正在编写一个程序,我想在WinForms应用程序中绘制二极管曲线。我有一个二极管名称列表,我有它们的点,你可以在图片的右边看到。即电压为X,电流为Y(曲线包含50个点) 我想做的是从列表中选择一个或多个二极管,它们的曲线显示在我的曲线图上。你现在看到的只是一个装满bmp的图片框。我知道这不是一个可靠的解决方案,所以我想问你做这件事的最佳方法是什么?我不知道有什么好的部件可以让我这么做。所以我只想知道什么是完成这项任务的最佳方法 二极管曲线类似于: 我的程序中可能有多达100条二极管曲线,所

我正在编写一个程序,我想在WinForms应用程序中绘制二极管曲线。我有一个二极管名称列表,我有它们的点,你可以在图片的右边看到。即电压为X,电流为Y(曲线包含50个点)

我想做的是从列表中选择一个或多个二极管,它们的曲线显示在我的曲线图上。你现在看到的只是一个装满bmp的图片框。我知道这不是一个可靠的解决方案,所以我想问你做这件事的最佳方法是什么?我不知道有什么好的部件可以让我这么做。所以我只想知道什么是完成这项任务的最佳方法

二极管曲线类似于:

我的程序中可能有多达100条二极管曲线,所有这些曲线(单个或多个)都应该通过在列表中单击它们来绘制

那你怎么想

更新

同样重要的是,通过取消选择曲线中的管脚,其曲线应从绘图中删除

我使用下面的代码绘制您看到的轴:

    Bitmap xyCords = new Bitmap(500, 500);
Graphics g = Graphics.FromImage(xyCords);
g.DrawLine(penAxis, 250, 0, 250, 500);
g.DrawLine(penAxis, 0, 250, 500, 250);
curveBox.Image = xyCords;
如果以后我制作了一个新的图形,我会像这样附加它,这怎么可能呢

curveBox.Image += newGraphic;
**请让我知道是否有任何组件或东西已经可以做我想要的。或者给我一个好方法!谢谢

尝试使用。您只需将所有需要的点放在一个数组中,并将其和一支笔传递给该方法

编辑: 在代码之后添加此项,以向自己证明这两个图共存。要删除一个或另一个,只需打印相同的点,但背景颜色的位图(测试它,我不记得它是什么)


@jonsca嗨,我的问题是我应该在什么基础上这样做?我认为在picturebox上它不好,因为据我所知,它只能包含一个图像。我的意思是,如果你只添加一条曲线很简单,但是一旦你在picturebox上已经有一条曲线作为bmp,当你要添加第二条曲线时,你必须再次同时添加这两条曲线。我说的对吗?不,因为你将把你的bmp作为一个图形对象,你可以做任何绘画和绘图是必要的。就个人而言,如果这方面不是你的整个项目,我会研究已经完成绘图工作的罐装控件(我现在不知道有什么,但我肯定有很多)。@jonsca ok,我想你的意思是我可以在picturebox中应用我想要的任何图形?我目前正在使用此代码仅绘制图片框的轴:
Bitmap xyCords=新位图(500500);Graphics g=Graphics.FromImage(xyCords);g、 抽绳(penAxis,250,0,250,500);g、 抽绳(penAxis,0,250,500,250);curveBox.Image=xyCords但是你看,我以后不能做一个新的图形,像
curveBox+=newBMP
这不编译。你能给我一点代码示例吗?是的,让我自己测试一下,以确保我没有记错。如果你说的是这样的话,你可以保留所有点阵列的锯齿状2D阵列,并每次重新绘制它们。@jonsca,我尝试了你的方法并为这项任务创建了一个类,它似乎有效:P但我不确定这是否是最好的方法,但它确实有效!
Point[] ptarray = new Point[3];
ptarray[0] = new Point(250, 250);
ptarray[1] = new Point(300, 300);
ptarray[2] = new Point(350, 400);

Pen pengraph = new Pen(Color.Green, 0.75F);
g.DrawCurve(pengraph, ptarray);

Point[] ptarray2 = new Point[3];
ptarray2[0] = new Point(100, 100);
ptarray2[1] = new Point(200, 150);
ptarray2[2] = new Point(250, 250);

Pen pengraph2 = new Pen(Color.Yellow, 1.25F);
g.DrawCurve(pengraph2, ptarray2);