Рисование с помощью System.Drawing.Graphics при загрузке формы

Я пытаюсь нарисовать прямоугольник, используя System.Drawing.Graphics в C# Windows Forms, но я не могу заставить его работать без использования нажатия кнопки.

Поиск в Интернете обнаружил, что я должен использовать либо событие Paint, либо Shown в самой форме, однако мои попытки не увенчались успехом.

Я хотел бы запустить мой Draw() метод при загрузке формы и ее компонентов.

public Form1()
{
    InitializeComponent();
    Draw(); //doesn't work
}

private void Draw()
{
    Graphics g = pictureBox.CreateGraphics();
    g.Clear(Color.White);
    Pen p = new Pen(Color.Black, 1);
    g.DrawRectangle(p, 0, 0, 50, 50);
}

private void ApproximateButton_Click(object sender, EventArgs e)
{
    Draw(); //works
}

Как правильно достичь этого?

2 ответа

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

protected override void OnPaint(PaintEventArgs e)
{
    base.OnPaint(e);
    using (Graphics g = e.Graphics)
    {
        g.Clear(Color.White);
        using (Pen p = new Pen(Color.Black, 1))
        {
            g.DrawRectangle(p, 0, 0, 50, 50);
        }
    }
}

Изменить: добавлено использование оператора для распоряжения ресурсами

Вы также должны быть в порядке размещения вашей функции под Form1 Load событие.

После подписки на Load событие попробуйте это;

public Form1()
{
    InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
    Draw();
}

private void Draw()
{
    Graphics g = pictureBox.CreateGraphics();
    g.Clear(Color.White);
    Pen p = new Pen(Color.Black, 1);
    g.DrawRectangle(p, 0, 0, 50, 50);
}

Load Событие вызывается после конструктора. Ваши элементы формы создаются в конструкторе, поэтому у вас возникают проблемы при попытке использовать их в одной и той же функции.

Другие вопросы по тегам