C# I';我试图用c来画一些浮点值的东西,但我';我没有成功

C# I';我试图用c来画一些浮点值的东西,但我';我没有成功,c#,graphics,C#,Graphics,我想使用以下代码在winform上绘制一些排序图形: private void button1_Click(object sender, EventArgs e) { Pen myPen = new System.Drawing.Pen(Color.Red); Graphics handler = this.CreateGraphics(); double[] nextPt = new double[2]

我想使用以下代码在winform上绘制一些排序图形:

private void button1_Click(object sender, EventArgs e)
        {
            Pen myPen = new System.Drawing.Pen(Color.Red);
            Graphics handler = this.CreateGraphics();


            double[] nextPt = new double[2];
            double[] maurerPt = new double[2];
            for (int index = 1; index < 361; index++)
            {
                nextPt = calcRose(index * d);

                //this line is incorrect but Drawline only accept Point which is int
                //and valued are in fractions thats why I use double
                handler.DrawLine(maurerPt[0], maurerPt[1], nextPt[0], nextPt[1];

                nextPt.CopyTo(maurerPt,2);
            }

            myPen.Dispose();
            handler.Dispose();

        }
private void按钮1\u单击(对象发送者,事件参数e)
{
Pen myPen=新系统.Drawing.Pen(颜色.红色);
Graphics handler=this.CreateGraphics();
double[]nextPt=新的double[2];
double[]maurerPt=新的双精度[2];
对于(int-index=1;index<361;index++)
{
nextPt=calcRose(指数*d);
//这条线不正确,但抽绳只接受int点
//值是分数,这就是为什么我用double
handler.drawine(maurerPt[0],maurerPt[1],nextPt[0],nextPt[1];
下一个副本(maurerPt,2);
}
myPen.Dispose();
handler.Dispose();
}
问题是我想创建一种数学图,叫做“maruer rose” 因为我的线的值是分数,所以我不能用它只接受int值的点

我怎样才能用双倍或浮动值来填充抽绳


问候。

汉斯应该把他的评论作为回答,但他在这两个方面都是正确的。
DrawLine()
有一个重载,它接受
点f
,所以这不是问题

您的下一个问题将是找出图形似乎随机消失的原因。您应该在控件的绘制事件中绘制所有图形,或者,如果在派生类中,则通过重写
OnPaint()
,始终绘制到提供的图形对象(
e.Graphics

有时控件会重新绘制自身,可能是因为它被最小化了,它的尺寸被更改了,不管怎样。您的代码只在单击按钮时绘制,这意味着系统强制重新绘制将擦除您的图形

接下来,您的代码可能存在内存“泄漏”。如果在创建画笔/图形对象和对其调用Dispose()之间发生任何事情,会发生什么情况?在这种特定情况下,您的程序可能会崩溃,但一般来说,更重要的是,您对
Dispose()
的调用不会发生,并且您暂时“泄漏”一些本地资源

您应该在
中使用
语句包装实现
IDisposable
的类型的创建,即

using( var myPen = new System.Drawing.Pen(Color.Red) )
using( var handler = this.CreateGraphics() )
{
    // use 'myPen' and 'handler' here
}

此构造实际上是一个try/finally块,因此即使卷发中的某些内容抛出异常,仍将调用
Dispose()

Hans应该将其评论作为答案发布,但他在这两个方面都是正确的。
DrawLine()
有一个重载,它接受
点F
,所以这不是问题

您的下一个问题将是找出图形似乎随机消失的原因。您应该在控件的绘制事件中绘制所有图形,或者,如果在派生类中,则通过重写
OnPaint()
,始终绘制到提供的图形对象(
e.Graphics

有时控件会重新绘制自身,可能是因为它被最小化了,它的尺寸被更改了,不管怎样。您的代码只在单击按钮时绘制,这意味着系统强制重新绘制将擦除您的图形

接下来,您的代码可能存在内存“泄漏”。如果在创建画笔/图形对象和对其调用Dispose()之间发生任何事情,会发生什么情况?在这种特定情况下,您的程序可能会崩溃,但一般来说,更重要的是,您对
Dispose()
的调用不会发生,并且您暂时“泄漏”一些本地资源

您应该在
中使用
语句包装实现
IDisposable
的类型的创建,即

using( var myPen = new System.Drawing.Pen(Color.Red) )
using( var handler = this.CreateGraphics() )
{
    // use 'myPen' and 'handler' here
}
此构造实际上是一个try/finally块,因此即使卷曲中的某些内容抛出异常,仍将调用
Dispose()

Graphics.DrawLine()具有接受PointF的重载。仅在Paint事件btw.Graphics中绘制。DrawLine()具有接受PointF的重载。仅在Paint事件btw中绘制。