【发布时间】:2011-10-23 16:56:09
【问题描述】:
在程序中,我使用图片框创建了多个面板。图片框被委派为可点击。我希望用户可以选择从订单中删除其中一个面板/图片框。现在,如果它被删除并且订单被重新排列,那么在被删除的图片框保留其委托顺序之后的所有图片框。因此,在被删除的那个之后单击其中的任何一个,会跳到它旁边的那个(即单击#9,它将转到#10)。我需要删除重新排序的委托并正确地重新委托它们。我试过了:
int z2 = z;
var myClickDelegate = (EventHandler)delegate { clicked(z2, null); };
PicBx[z].Click += myClickDelegate;
创造和
PicBx[z].Click -= myClickDelegate;
删除
还有
int z2 = z;
PicBx[z].Click -= delegate { clicked(z2, null); };
但他们都没有删除原始委托。
【问题讨论】:
-
这就是您要避免匿名代表的原因。
-
Ω 是有效标识符,无需满足 z2。
-
我假设 Ω,你的意思是 z?如果是这样,那是因为它在循环中,您需要在循环中声明一个单独的变量。
-
@Claus - 根本不应该避免使用匿名委托作为事件处理程序。使用(非匿名)方法作为事件处理程序是不好的 OO - 它不会封装您的逻辑。此外,由于事件处理程序签名,您可以将错误的事件处理程序连接到事件等。使用匿名委托允许您编写可以使用局部变量的内联事件处理程序,不要破坏代码流,并且对其他班级隐藏。他们太棒了。
-
是的,那是在您不想想再次删除它们时使用的。
标签: c# delegation