1

フォームが読み込まれているときに、CreateGraphics()はグラフィックスオブジェクトを返すべきではありませんか?

つまり、Form1_Loadイベントで、たとえば次のように書くことができますか?

Graphics x;
private void Form1_Load(object sender, EventArgs e)
{
    x = this.CreateGraphics();
}

そうでない場合は、なぜですか?

新しいフォームを作成すると、コンストラクターがフォームのすべてのオブジェクトを開始すると思いました。では、グラフィックオブジェクトも使用しないのはなぜですか?

form_loadで描画しようとすると、描画したものが表示されないためです。

主な理由は次のとおりです。ボードを備えたゲームを作成したいので、ユーザーが新しいゲームをクリックすると、最初にボードを開始して描画します。そして、onPaintイベントでは、ボードの現在の状態を描画したいだけです。そのため、ボードの初期状態はformLoadイベントで描画する必要があると思いました。

4

1 に答える 1

4

この方法でGraphicsオブジェクトを使用しないでください。使用法ごとにusingブロックで囲むか、描画操作の各セットの後に必ず破棄する必要があります。ここでのコードは、不要なGraphicsオブジェクトをぶら下げたままにします。

簡単な例:

private void MyonPaintOverload()
{
    using(Graphics x = this.CreateGraphics())
    {
        // draw here...
    }
}

また、Form_Load()その時点ではウィンドウが実際には表示されないため、描画は機能しません。基本的に、何も利用することはありません。

はい、通常はサイクルごとに全体を再描画する必要があります。別のウィンドウをウィンドウ上でドラッグするだけで描画が「消去」され、他のウィンドウが移動されて無効になると、すべてを再描画する必要があるためです。手動で描いたもの。

于 2013-02-22T21:59:51.770 に答える