Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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
Visual C#在调用Click事件后直接删除该事件_C#_List_Visual Studio 2013_Onclick - Fatal编程技术网

Visual C#在调用Click事件后直接删除该事件

Visual C#在调用Click事件后直接删除该事件,c#,list,visual-studio-2013,onclick,C#,List,Visual Studio 2013,Onclick,我已经创建了图片盒的列表,并在创建过程中附加了一个点击事件 gameDeckPics[i].Click += (sender, args) => { // Code to execute on click }; i引用当前添加到列表中的Picturebox的当前索引。使用单击事件时,我会将PictureBox从gameDeckPics移动到另一个列表。我的问题是

我已经创建了
图片盒的
列表
,并在创建过程中附加了一个点击事件

gameDeckPics[i].Click += (sender, args) =>
                    {
                        // Code to execute on click
                    };

i
引用当前添加到列表中的
Picturebox
的当前索引。使用单击事件时,我会将PictureBox从
gameDeckPics
移动到另一个列表。我的问题是:如何在单击后直接从项目列表中的特定项目中删除单击事件?

当您创建这样的内联方法时,您不能这样做。创建一个单独的事件方法

private void picBox_Click(object sender, EventArgs e)
{
    // Code to execute on click
}
然后,您可以通过以下方式进行订阅和取消订阅:

gameDeckPics[i].Click += picBox_Click;

gameDeckPics[i].Click -= picBox_Click;
如果要在某个特定的
PictureBox
的单击事件首次触发时取消订阅,可以在单击事件中执行

private void picBox_Click(object sender, EventArgs e)
{
    // Code to execute on click

    ((PictureBox)sender).Click -= pictureBox1_Click;
}

啊,太好了,我现在明白了。优雅的解决方案,谢谢+1.