循环中的取消委托事件

本文关键字:事件 取消 循环 | 更新日期: 2023-09-27 18:09:22

我在WinForms c#中。我在一个循环中把点击委托给一个函数。

foreach (Class.Item item in _searchName)
        {
            indexGroup++;
            if (indexGroup <= MAX_SEARCHES)
            {
                myCntrl = (GSSearcher)panelSearch.Controls["gsSearcher" + indexGroup.ToString()];
                myCntrl.Visible = true;
                myCntrl.SetId = item.Id;
                myCntrl.SetText1 = item.Name;
                myCntrl.SetText2 = item.Description;
                string[] onlyDate = item.DateCreate.ToString().Split(' ');
                myCntrl.SetText3 = onlyDate[0].ToString();
                //HAY QUE MIRAR ESTO.
                myCntrl.MyClick += delegate { ClickIdToLoad(item.Id); };
            }
        }

这是在搜索器中,每次有人搜索时,循环都会再次赋值该函数。当我给clickidtolload函数设置断点时,很多时候它会停在那里。我需要"取消委托"的功能或类似的东西,一旦已经委托。

循环中的取消委托事件

多亏了Chrisk,我使用了这个解决方案:

是否有可能保存ìtem。id在您控件的标签中?这似乎是一个自定义控件,因此您可以在事件处理程序中查询Tag,并只需调用clickidtolload ((int)item.Id)。这样你就不需要保存一堆引用了。

但我没有"取消授权"。

谢谢ChrisK ! !