2012-01-13 7 views
0

に描画、私が持っている:だからの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); 
    } 

注自動的に配置されたブラシを保証ブラシ(NOハット)のスタックセマンティクスの使用。

+0

ありがとうございます:D問題は1つ少ないです。 :D – makeNicePlusOne