我想要一个仅将enum作为参数的事件.例如
public enum MyEvents{
Event1
}
// how do I declare this to take enum MyEvents as argument
public static event EventHandler EventTriggered;
public static void Trigger(MyEvent event )
{
if (EventTriggered != null)
{
EventTriggered(event);
}
}
Run Code Online (Sandbox Code Playgroud)
Che*_*hen 63
EventHandlerEventArgs作为参数接收.要解决您的问题,您可以构建自己的问题MyEventArgs.
public enum MyEvents
{
Event1
}
public class MyEventArgs : EventArgs
{
public MyEvents MyEvent { get; set; }
}
public static event EventHandler<MyEventArgs> EventTriggered;
public static void Trigger(MyEvents ev)
{
if (EventTriggered != null)
{
EventTriggered(null, new MyEventArgs { MyEvent = ev });
}
}
Run Code Online (Sandbox Code Playgroud)
Guf*_*ffa 24
您为参数声明了一个委托:
public enum MyEvents { Event1 }
public delegate void MyEventHandler(MyEvents e);
public static event MyEventHandler EventTriggered;
Run Code Online (Sandbox Code Playgroud)
虽然框架中的所有事件都采用了或来自的参数EventArgs,但您可以使用您喜欢的任何参数.但是,人们可能会期望框架中使用的模式,这可能会使您的代码更难以遵循.
Ste*_*her 12
我可能会在游戏中迟到,但如何:
public event Action<MyEvent> EventTriggered = delegate { };
private void Trigger(MyEvent e)
{
EventTriggered(e);
}
Run Code Online (Sandbox Code Playgroud)
将事件设置为匿名委托可以避免我检查事件是否为空.
我发现这在使用MVVM时很方便,就像使用ICommand.CanExecute方法一样.
您需要声明自定义事件处理程序.
public class MyEventArgs: EventArgs
{
...
}
public delegate void MyEventHandler(object sender, MyEventArgs e);
public class MyControl: UserControl
{
public event MyEventHandler MyEvent;
...
}
Run Code Online (Sandbox Code Playgroud)