Рисование с помощью 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
Событие вызывается после конструктора. Ваши элементы формы создаются в конструкторе, поэтому у вас возникают проблемы при попытке использовать их в одной и той же функции.