Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何让Windows为通过编程创建的PictureBox引发鼠标单击事件?_C#_Winforms_Events - Fatal编程技术网

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

C# 如何让Windows为通过编程创建的PictureBox引发鼠标单击事件?,c#,winforms,events,C#,Winforms,Events,我正在构建一个虚拟棋盘游戏,我需要能够点击棋子来移动它们。该图板在背景中创建为一幅图片,而各部分是位于背景之上的图片框。更具体地说,它们是从PictureBox继承的自定义类游戏。我知道PictureBox有一个Name\u Click方法,单击该方法时会调用它,但我正在以编程方式创建我的作品,如下所示: public Player(int identity, GameBoard Board) { ID = identity; for (int i

我正在构建一个虚拟棋盘游戏,我需要能够点击棋子来移动它们。该图板在背景中创建为一幅图片,而各部分是位于背景之上的图片框。更具体地说,它们是从PictureBox继承的自定义类游戏。我知道PictureBox有一个Name\u 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);
        }
    }
公共玩家(int身份,游戏板)
{
ID=身份;
对于(int i=0;i<4;i++)
{
棋子[i]=新游戏棋子(ID,Board.GetPlaceSize(),Board.GetPieceColor(ID),Board);
}
}
因此,我不想硬编码为每个游戏调用的方法,因为这会破坏我在这里的目的

有什么建议吗?我可以包含任何其他有帮助的代码,并且我非常灵活地重新设计代码,如果这能让我以后的生活更轻松的话。提前感谢。

(连接到事件处理程序)

(事件处理程序)

(连接到事件处理程序)

(事件处理程序)

可能是:

gamePiece.Click += myEventHandler;
其中,
gamePiece
gamePiece
对象,
myEventHandler
是任何形式的事件处理程序。。。代表,兰姆达,随便什么。

可能是:

gamePiece.Click += myEventHandler;
其中,
gamePiece
gamePiece
对象,
myEventHandler
是任何形式的事件处理程序。。。委托、lambda等等。

只需为控件添加事件处理程序:

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

或使用:

公共玩家(int身份,游戏板)
{
ID=身份;
对于(int i=0;i<4;i++)
{
新的,新的。。。。
件[i]。单击+=(发件人,e)=>
{
//做点什么
};
}
}
只需为控件添加事件处理程序:

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

或使用:

公共玩家(int身份,游戏板)
{
ID=身份;
对于(int i=0;i<4;i++)
{
新的,新的。。。。
件[i]。单击+=(发件人,e)=>
{
//做点什么
};
}
}
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
                        };
    }
}