Я пытаюсь нарисовать что-то с плавающей точкой в ​​C #, но я не удалась - PullRequest
0 голосов
/ 04 ноября 2011

Я хочу нарисовать какую-то графику на 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();

        }

проблема в том, что я хочу создать какой-то математический граф, который называется "maruer rose" и так как мои значения в строках делятся на дроби, поэтому я не могу использовать Point, которая принимает только значения int

как мне подать Drawline с двойным или плавающим значением?

С уважением.

1 Ответ

3 голосов
/ 04 ноября 2011

Ганс должен был опубликовать свой комментарий в качестве ответа, но он прав в обоих случаях.DrawLine() имеет перегрузку, которая принимает PointF, так что это не проблема.

Ваша следующая проблема будет выяснить, почему ваш график, кажется, исчезает случайно.Вы должны выполнить все вашего рисунка в событии Paint элемента управления или, если в производном классе, переопределив OnPaint(), всегда рисовать в предоставленном объекте Graphics (e.Graphics).

Будут времена, когда ваш контроль перерисовывает себя, возможно, потому что он был минимизирован, его размеры были изменены, что угодно.Ваш код рисует только при нажатии кнопки, а это означает, что принудительная перерисовка системы уничтожит ваш график.

Далее, ваш код имеет потенциальную «утечку» памяти.Что произойдет, если что-нибудь между созданием объектов пера / Графика и вызовом Dispose () для них?В этом конкретном случае ваша программа, скорее всего, просто потерпит крах, но в целом и, что более важно, ваши вызовы Dispose() не будут выполняться, и вы временно «вытекли» некоторые нативные ресурсы.

Вы должны обернуть созданиетипов, которые реализуют IDisposable в using операторах, то есть

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

Эта конструкция на самом деле является блоком try / finally, поэтому даже если что-то внутри фигурных скобок выдает исключение, Dispose() будет по-прежнему вызываться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...