返回首页

我有一个表格可能包含同一控制根据不同的应用的几个实例。某些应用程序将需要极少数,其他人将这些控件需要40。我会在VB6控件添加手动的形式,分配一个有意义的名字,然后双击执行一个事件处理程序的控制。事件处理程序会有很大的不同,从控制到控制。

我新做在C#的事件,但我认为我的方式将实现每个控件的事件如下:


Control1.Operate += new MyControl.OperateEventHandler(Control1_Operate);

.

.

.

Control10.Operate += new MyControl.OperateEventHandler(Control10_Operate);


然后,我会实现代码在Control1_Operate等。

但我宁愿没有做上述每次我添加到屏幕上的控制。我想C#的处理对我来说,喜欢在下面,但我卡住时,我需要提供实际的事件处理程序。

{C}
如果我使用Generic_Operate的处理程序,然后我会以某种方式需要一个有需要进行操作的控制。或者我可以以某种方式自动生成的处理程序像这样的"名":


foreach (Control ctrl in this.Controls)

{

    if (ctrl.GetType() == typeof(UniControl))

    {

        temp = (UniControl)ctrl;

        temp.Operate += new UniControl.OperateEventHandler(temp.Name + "_Operate");

    }

}


显然,上述将无法正常工作,但也许还有一种方式来获得我想要的效果吗?

回答

评论会员:游客 时间:2012/02/06
迈赫迪吴拉姆:事件处理程序,有一个发件人的属性,您可以使用得到控制,发射如果你所有的事件处理程序是相似的,只使用一个处理程序,并使用发件人属性
。曼弗雷德・R. Bihy
评论会员:游客 时间:2012/02/06
取决于您的操作事件处理程序委托的定义。事件处理程序应该接受一个参数,将包含一个引发事件的控制。如果是你自己的控制,你可以看看源代码,并看到如果正确定义允许一个EventArgument的传球或事件处理程序的参数的衍生金融工具及其事件委托。如果你没有源代码的控制和事件处理程序委托不具有一个参数,这将无法工作。的问候,mdash;如MRB
BobJanova
评论会员:游客 时间:2012/02/06
该事件处理程序应该通过事件源作为它的参数之一。所有类型的内置源(发件人,净公约)为对象的第一个参数传递。这看起来像一个自定义的委托,所以确保它传递的事件作为第一个参数NDASH源,你可以使它像内置类型,或者,如果只有一种类型的对象感,可以对象使用该类型,即{体C3}然后,在处理程序中,你可以使用第一个参数,找出控制你被解雇:{的C4}
hzawary
评论会员:游客 时间:2012/02/06
家伙解释的权利,也可以看到这个解决方案我您可以为您的控制只有一个这样的处理程序:{C5的}然后把这个事件的功能,轻松管理控制;){5233}我觉得你有2路:1。如果控制不相同的工作:{C7-}2。O.W.如果控制不相同的工作,你写的所有国家完全(写出所有情况下):{C8的}