传递按钮单击方法作为参数

时间:2012-10-11 08:42:24

标签: c# parameters event-handling devexpress

我想将buttonClick方法作为参数传递给函数: 我们有

buttonClick:

private void iDeactivate_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
 ...
}

功能:

private void AddItemToPopUpMenu(GridViewMenu cMenu, string cItemCaption, EventHandler cClickHandler, Image cItemImage, bool cItemBeginGroup)
{
    DXMenuItem item = new DXMenuItem();
    item.Caption = cItemCaption;
    item.Click += new EventHandler(cClickHandler); //problem there
    item.Image = cItemImage;
    item.BeginGroup = cItemBeginGroup;
    cMenu.Items.Add(item);
}

那么有人可以建议解决方案吗?

尝试:

AddItemToPopUpMenu(cMenu, iDeaActive.Caption, iDeactivate_ItemClick, null, false);

并将函数参数更改为:

private void AddItemToPopUpMenu(GridViewMenu cMenu, string cItemCaption, EventHandler<ItemClickEventArgs> cClickHandler, Image cItemImage, bool cItemBeginGroup)

然后我在代码中出现了错误,我在那里标记了“有问题”

那么可以传递buttonClick方法,而无需更改参数吗?

编辑: 当我看到一些错误的答案时,应该说我必须作为参数传递,因为多次调用AddItemToPopUpMenu,每次使用不同的方法

3 个答案:

答案 0 :(得分:3)

从表面上看,DXMenuItem.Click只提供常规的EventArgs对象,因此只能使用常规EventHandlers

您正在尝试在处理程序中获取专门的DevExpress.XtraBars.ItemClickEventArgs对象,而的事件不会提供它

我不认为你想做的事情是可能的。您需要减少处理程序,因此它只需要常规EventArgs,或者您需要找到Click事件提供ItemClickEventArgs的按钮类型。

答案 1 :(得分:0)

如果签名与事件所需的委托相匹配,您可以直接为方法指定方法名称

item.Click += iDeactivate_ItemClick;

答案 2 :(得分:0)

item.Click += cClickHandler;

对你来说已经足够了,因为你已经通过了委托