1

私は仮想ボードゲームを構築しています。ピースをクリックして移動できるようにする必要があります。ボードは背景の絵として作成され、その上に絵箱があります。具体的には、PictureBoxから継承するカスタムクラスのGamePieceです。PictureBoxには、クリックされたときに呼び出されるName_Clickメソッドがあることは知っていますが、次のようにプログラムでピースを作成しています。

    public Player(int identity, GameBoard Board)
    {
        ID = identity;
        for (int i = 0; i < 4; i++)
        {
            Pieces[i] = new GamePiece(ID, Board.GetPlaceSize(), Board.GetPieceColor(ID), Board);
        }
    }

したがって、ゲームピースごとに呼び出されるメソッドをハードコーディングしたくありません。これは、ここでの私の目的を損なうためです。

助言がありますか?役立つ他のコードを含めることができます。コードを再設計することに関しては、後で自分の生活が楽になるのであれば、かなり柔軟です。前もって感謝します。

4

3 に答える 3

1

Control.Clickコントロールのイベントハンドラーを追加するだけです。

public Player(int identity, GameBoard Board)
{
    ID = identity;
    for (int i = 0; i < 4; i++)
    {
        Pieces[i] = new GamePiece(ID, Board.GetPlaceSize(), Board.GetPieceColor(ID), Board);
        Pieces[i].Tag = ID;
        Pieces[i].Click += pieces_Click;
    }

Clickイベントで :

private void pieces_Click(object sender, EventArgs e)
{
    int id = (int) ((Pieces))sender.Tag;
    DoSomethingForId(id);
}

または使用Anonymous Methods

public Player(int identity, GameBoard Board)
{
    ID = identity;
    for (int i = 0; i < 4; i++)
    {
        Pieces[i] = new ....
        Pieces[i].Click += (sender, e) =>
                        {
                            // Do some thing
                        };
    }
}
于 2012-10-23T04:13:27.873 に答える
0

(イベントハンドラーに接続します)

Pieces[i].Click += new EventHandler(theOnClickEvent);

(イベントハンドラー)

void theOnClickEvent(object sender, EventArgs e)
    {
        //clicked.
    }
于 2012-10-23T04:05:41.043 に答える
0

それは可能性が:

gamePiece.Click += myEventHandler;

オブジェクトはどこgamePieceにあり、イベントハンドラーの任意の形式です...デリゲート、ラムダ、何でも。GamePiecemyEventHandler

于 2012-10-23T04:05:53.800 に答える