0

これが以前に尋ねられた場合は申し訳ありません。

以前にグラフィックスを含む作業を行ったことがないため、C# Windows フォームで単純な接続 4 ゲームに取り組んでいました。これを行うには、ボタンが押されたときに円を描くプログラムが必要ですが、関数を呼び出す方法がわかりません。

public void printToken(PaintEventArgs pe, int x)
    {
        Graphics g = pe.Graphics;
        Pen blue = new Pen(Color.Blue);
        Pen red = new Pen(Color.Red);

        Rectangle rect = new Rectangle(50 + ((x-1) * 100), 50, 50, 50);
        g.DrawEllipse(blue, rect);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        printToken(null, 1);
    }

null は単なるプレースホルダーであり、明らかに機能しません。

ありとあらゆる助けをいただければ幸いです。

4

2 に答える 2

1

通常、カスタム描画を行う Windows フォーム アプリケーションでは、Formまたはイベント ハンドラーPictureBoxで直接描画するか、メソッドをオーバーライドPaintするサブクラスを作成します。イベント ハンドラ またはでは、すべてを描画します(つまり、1 つの円だけでなく、すべての円)。次に、基になるデータ構造が変更され、再描画が必要であることを示したら、再描画が必要であることを示すコントロールを呼び出します。次にイベント ループを通過するときに、イベント ハンドラーが実行されるか、メソッドが呼び出されます。そのメソッド内に、取得するために必要なオブジェクトがありますControlOnPaintPaintOnPaintInvalidate()PaintOnPaintPaintEventArgsGraphics描画に使用するオブジェクト。「一度描画して忘れる」(たとえば、ボタンがクリックされたとき) ことは望ましくありません。これは、コントロール自体の再描画が必要になる原因となるあらゆる種類のことがあるからです。詳細については、この質問と回答を参照してください。

編集:あなたのコメントに応えて、ここにいくつかの手持ちがあります. (コメントのつもりでしたが長くなりました。)

今のところForm、Visual Studio の Windows フォーム デザイナーで空白から開始すると仮定すると、最も簡単な方法は を選択しForm、VS の [プロパティ] ペインで稲妻のツールバー ボタンをクリックして、フォームのフォームを表示することです。イベント。イベントまで下にスクロールしPaint、ラベルの右側の空白スペースの任意の場所をダブルクリックします。これにより、フォームのPaintイベント ハンドラーが接続され、フォームのコード ファイルに新しく追加されたメソッドが表示されます。PaintEventArgs描画を行うために呼び出されたオブジェクトを使用しeます。次に、ボタンのクリック時に描画されるものを変更する必要がある場合は、クリック ハンドラーで、描画されるもの (たとえば、駒の位置と色) を決定するデータを変更し、完了したら を呼び出しますInvalidate()

于 2016-12-21T21:56:58.450 に答える
0

1 つのチップを表す UserControl をフォームに追加し、OnPaint メソッドをオーバーライドしてそのイベントにカラーリング コードを配置すると、Paint イベントが発生したときに Graphics オブジェクトは null になりません。

UserControl のペイントを開始するには、Refresh メソッドまたは InvalidateRectangle メソッドを呼び出します。どちらも OnPaint メソッドを起動します。

クラス階層を最初に OnPaint に呼び出して、オブジェクトの背景が最初に描画されるようにしてください。

protected override void OnPaint(PaintEventArgs e) {
    base.OnPaint(e);
    Graphics g = e.Graphics;
        Pen blue = new Pen(Color.Blue);
        Pen red = new Pen(Color.Red);
        Rectangle rect = new Rectangle(50 + ((x-1) * 100), 50, 50, 50);
        g.DrawEllipse(blue, rect);

}
于 2016-12-21T21:59:54.550 に答える