需要帮助从另一个类调用事件。 我有宣布活动的课程:
public class MxPBaseGridView : GridView
{
public event AddNewItemsToPopUpMenuEventHandler AddNewItemsToPopUpMenu;
...
}
我需要调用event的另一个类有方法和“AddNewItemsToPopUpMenuEventHandler”委托
public delegate void AddNewItemsToPopUpMenuEventHandler(PopupMenuShowingEventArgs e);
public static class GridViewUtils
{
public static void gridView_PopupMenuShowing(object sender, PopupMenuShowingEventArgs e)
{
if (e.MenuType != DevExpress.XtraGrid.Views.Grid.GridMenuType.Row)
{
if (menu != null)
{
if (sender is MxPBaseAdvBandedGridView)
{
MxPBaseAdvBandedGridView currentGrid = sender as MxPBaseAdvBandedGridView;
...
currentGrid.AddNewItemsToPopUpMenu();
if (currentGrid.AddNewItemsToPopUpMenu != null) //there i need to call event
currentGrid.AddNewItemsToPopUpMenu(e); // how you understand it doesn't work
}
那么做同样工作的正确方法是什么?
答案 0 :(得分:3)
您只能在已定义事件的类中调用事件。常见的是使用特定方法来触发事件,您必须在定义事件的类中添加该事件。在你的情况下,在类MxPBaseGridView中。添加以下内容:
public void OnAddNewItemsToPopUpMenu(<eventargstype> e) {
var addNewItemsToPopUpMenu = AddNewItemsToPopUpMenu;
if (addNewItemsToPopUpMenu != null)
addNewItemsToPopUpMenu(this, e);
}
注意:我不确定eventargs类型是什么,所以我把它打开了。
然后你可以用静态方法调用这个方法。
注意:通常我将On ...方法定义为private,如果需要,将其定义为protected。在这种情况下,我已将其定义为公开,因为您需要从课堂外调用它。