我创建了一个继承自 System.Windows.Forms.UserControl 的 WinForms 控件...我在控件上有一些自定义事件,我希望控件的使用者能够看到这些事件。在设计时,我实际上无法让我的事件显示在“属性”窗口的“事件”选项卡中。这意味着分配事件的唯一方法是以编程方式编写
myUserControl.MyCustomEvent += new MyUserControl.MyCustomEventHandler(EventHandlerFunction);
我想这对我来说很好,但是当其他人使用我的 UserControl 时,他们不会知道这些事件的存在(除非他们阅读库 doco...是的,对的)。我知道该事件将使用 Intellisense 显示,但如果它也可以显示在属性窗口中,那就太好了。
确保您的活动公开。例如...
[Browsable(true)]
public event EventHandler MyCustomEvent;
使用委托的解决方案。例如,我用于处理项目添加事件的自定义 ListView : 宣布您的代表:
public delegate void ItemAddedHandler(object sender, ItemEventArgs e)
然后声明使用委托的事件:
[Browsable(true)]
public event ItemAddedHandler ItemAdded;
注意:ItemEventArgs 是自定义 EventArgs
希望能帮助你,对我来说效果很好
这个问题我已经遇到过很多次了! 当您按照教程操作时,他们使用标准
System.EventHandler
或任何内置处理程序作为您的委托类型,如果您的自定义事件是公共的,它将起作用。
但是!如果您不想使用内置事件处理程序之一(我大多不想),那么您必须定义自己的委托。但如果你这样做的方式错误,那么它仍然不会在编辑器中可见,即使它是公开的!
Visual Studio 正在寻找委托上的属性,以使其知道它是否应该出现在编辑器中。这是我之前制作的一个示例:
[ComVisible(true)]
public delegate void CustomerHappyDelegate(bool isHappy);
public event CustomerHappyDelegate CustomerHappy;