Рисование в Form_Load

Так что я:

private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
 DrawBackground();
}
private: System::Void DrawBackground(){ 
 Graphics^ g1=this->CreateGraphics();
 SolidBrush^ p1 = gcnew SolidBrush(System::Drawing::Color::Gray);
 g1->FillRectangle(p1,90,150,600,150);
}

Это должно загрузить этот прямоугольник при загрузке формы, но это не так. Зачем?? Как вы это правильно пишете?

1 ответ

Вы не можете нарисовать событие Load, форма пока не отображается. Также не рекомендуется использовать CreateGraphics(). Все, что вы рисуете, не сохранится до следующего перерисовки. Вместо этого переопределите метод OnPaintBackground. Как это:

protected:
 virtual void OnPaintBackground(PaintEventArgs^ e) override {
 __super::OnPaintBackground(e);
 SolidBrush brush(System::Drawing::Color::Gray);
 e->Graphics->FillRectangle(%brush,90,150,600,150);
 }

Обратите внимание на использование семантики стека для кисти (без шляпы), которая гарантирует, что кисть автоматически удаляется.

licensed under cc by-sa 3.0 with attribution.