我正在构建一个虚拟棋盘游戏,我需要能够点击这些棋子来移动它们。该板在背景中被创建为一张图片,其中的图片是顶部的图片框。更具体地说,它们是继承自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的方法进行硬编码,因为这会在这里打败我的目的。
有什么建议吗?我可以包含任何其他有用的代码,就重新设计代码而言,我非常灵活,如果这样可以让我以后的生活更轻松。提前谢谢。
答案 0 :(得分: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);
}
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
};
}
}
答案 1 :(得分:0)
(连接到事件处理程序)
Pieces[i].Click += new EventHandler(theOnClickEvent);
(事件处理程序)
void theOnClickEvent(object sender, EventArgs e)
{
//clicked.
}
答案 2 :(得分:0)
可能是:
gamePiece.Click += myEventHandler;
gamePiece
是GamePiece
对象,myEventHandler
是任何形式的事件处理程序...委托,lambda等等。