如何让Windows为编程创建的PictureBox引发鼠标单击事件?

时间:2012-10-23 03:56:15

标签: c# winforms events

我正在构建一个虚拟棋盘游戏,我需要能够点击这些棋子来移动它们。该板在背景中被创建为一张图片,其中的图片是顶部的图片框。更具体地说,它们是继承自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的方法进行硬编码,因为这会在这里打败我的目的。

有什么建议吗?我可以包含任何其他有用的代码,就重新设计代码而言,我非常灵活,如果这样可以让我以后的生活更轻松。提前谢谢。

3 个答案:

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

或使用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
                        };
    }
}

答案 1 :(得分:0)

(连接到事件处理程序)

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

(事件处理程序)

void theOnClickEvent(object sender, EventArgs e)
    {
        //clicked.
    }

答案 2 :(得分:0)

可能是:

gamePiece.Click += myEventHandler;

gamePieceGamePiece对象,myEventHandler是任何形式的事件处理程序...委托,lambda等等。