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);
        }
    }

因此,我不想硬编码为每个 Gamepiece 调用的方法,因为这会破坏我在这里的目的。

有什么建议么?我可以包含任何其他有用的代码,而且我在重新设计代码方面非常灵活,如果这能让我以后的生活更轻松的话。提前致谢。

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是任何形式的事件处理程序......委托,lambda,等等。GamePiecemyEventHandler

于 2012-10-23T04:05:53.800 回答