Не выводится графика в C# Windows Form

376
04 апреля 2017, 08:58

работаю в MVisualStudio 2015, на Windows7. Надо написать функцию, которая по точка выводит несколько линий. основная часть кода

    private void My_Paint()
    {
        Graphics g = CreateGraphics();
        //g.DrawEllipse(new Pen(Color.Red), 10, 10, 50, 50);
        //g.DrawRectangle(new Pen(Color.Green), 70, 10, 50, 50);
        //g.DrawLine(new Pen(Color.Yellow), 130, 35, 150, 35 );
        Pen LineMaker = new Pen(Color.Red);
        for (byte n = 0; n < kolvo_tochek - 1; n++)
            g.DrawLine(LineMaker, coordOld[n, 0], coordOld[n, 1], coordOld[n + 1, 0], coordOld[n + 1, 1]);
        g.DrawLine(LineMaker, coordOld[2, 0], coordOld[2, 1], coordOld[0, 0], coordOld[0, 1]);
        g.DrawLine(LineMaker, coordOld[0, 0], coordOld[0, 1], coordOld[3, 0], coordOld[3, 1]);
        g.DrawLine(LineMaker, coordOld[2, 0], coordOld[2, 1], coordOld[8, 0], coordOld[8, 1]);
        g.DrawLine(LineMaker, coordOld[2, 0], coordOld[2, 1], coordOld[8, 0], coordOld[8, 1]);
        //
        LineMaker = new Pen(Color.DarkBlue);
        for (byte n = 0; n < kolvo_tochek - 1; n++)
            if (n != 2)
                g.DrawLine(LineMaker, coord[n, 0], coord[n, 1], coord[n + 1, 0], coord[n + 1, 1]);
        g.DrawLine(LineMaker, coord[0, 0], coord[0, 1], coord[3, 0], coord[3, 1]);
        g.DrawLine(LineMaker, coord[2, 0], coord[2, 1], coord[8, 0], coord[8, 1]);
        g.DrawLine(LineMaker, coord[2, 0], coord[2, 1], coord[8, 0], coord[8, 1]);
    }

перед рисованием инициализируем "домик"

public uint[,] DefaultFigure()
    {
        uint[,] mypoints = new uint[kolvo_tochek, 3];
        for (sbyte n = 0; n < kolvo_tochek; n++)
            mypoints[n, 2] = 1;
        //must be picture "house" 
        mypoints[0, 1] = mypoints[2, 1] = 20;
        mypoints[1, 0] = 50;
        mypoints[2, 0] = mypoints[3, 1] = mypoints[4, 1] = mypoints[7, 1] = mypoints[8, 0] = mypoints[8, 1] = 100;
        mypoints[4, 0] = mypoints[5, 0] = 30;
        mypoints[5, 1] = mypoints[6, 1] = 40;
        mypoints[6, 0] = mypoints[7, 0] = 70;
        return mypoints;
    }

Но всеравно чистый лист. Почему рисунок не выводится? весь код https://yadi.sk/i/YY0w91Zs3GbNrx

Answer 1

Возможно, изображение переписывается другой процедурой после вашего рисования, поскольку вы рисуете не в том объекте Graphics. Объект Graphics нужно получать из аргументов события Paint, а не из CreateGraphics:

private void form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{    
    Graphics g = e.Graphics;
    // Draw lines...
}

В том месте кода, где нужно обновить картинку, вызовите метод Refresh().

READ ALSO
Приведение типа к dynamic

Приведение типа к dynamic

- Это будет UpCust или DownCast?

250
Как организовать очередь потоков

Как организовать очередь потоков

Очень нужна помощь, подскажите пожалуйста, как сделать последовательное выполнение методов, сломал себе уже всю голову

277
Блокируется UI при использовании async-await C#

Блокируется UI при использовании async-await C#

Есть форма с button и LabelПри нажатии на кнопку выполняется метод button1_Click:

243
Возможен ли асинхронный сервер RabbitMQ?

Возможен ли асинхронный сервер RabbitMQ?

Рассмотрел шаблон работы RabbitMQ(RPC) принцип работы описан тутКак я понял единственная возможность как то распараллелить обработку запросов...

196