C# 如何创建自定义事件?
我有一组自定义的用户控件:NavigationBar和NavigationItem 我希望每当用户单击NavigationItem中的任何位置时,都会触发一个事件。我不知道怎么设置这个 我试过这个:C# 如何创建自定义事件?,c#,winforms,events,user-controls,C#,Winforms,Events,User Controls,我有一组自定义的用户控件:NavigationBar和NavigationItem 我希望每当用户单击NavigationItem中的任何位置时,都会触发一个事件。我不知道怎么设置这个 我试过这个: public partial class NavigationBar : UserControl { public NavigationBar() { InitializeComponent(); SetupEvents(); }
public partial class NavigationBar : UserControl
{
public NavigationBar()
{
InitializeComponent();
SetupEvents();
}
public List<NavigationItem> NavigationItems { private get; set; }
public NavigationItem SelectedItem { get; set; }
private void SetupEvents()
{
navigationItem1.Click += new EventHandler(navigationItemClick);
}
void navigationItemClick(object sender, EventArgs e)
{
MessageBox.Show("Clicked on " + sender.ToString());
}
}
public部分类导航栏:UserControl
{
公共导航栏()
{
初始化组件();
SetupEvents();
}
公共列表导航项{private get;set;}
公共导航项SelectedItem{get;set;}
私有void SetupEvents()
{
navigationItem1.Click+=新建事件处理程序(navigationItemClick);
}
void navigationItemClick(对象发送者,事件参数e)
{
Show(“单击”+sender.ToString());
}
}
但该事件仅在用户专门单击NavigationItem控件时触发,而不是在用户单击图片或文本时触发。(这些是图片盒和标签)
最好的做法是什么?我想创造一些好的东西,而不是黑客代码。谢谢 把这样的东西放到你的课堂上:
public event EventHandler NavigationItemClick;
这将在类中创建一个名为NavigationItemClick
的新事件。表单设计者甚至会看到它
在方法NavigationItem中,单击可以调用事件
EventHandler handler = this.NavigationItemClick;
if (handler != null)
{
handler(this, EventArgs.Empty);
}
将事件保存到处理程序
变量中以避免争用情况非常重要EventHandler
是一个委托,因此您可以像调用方法一样调用它,因此在if
语句中有一行。if
本身确保有人已附加到您的事件。在什么类中创建新事件?我在NavigationItem.cs类中添加了EventHandler,表单设计器无法找到该特定事件。有什么建议吗?@Sergio:您可以在代码中附加事件处理程序。@Sergio:将我给您的第一行事件放入NavigationBar类,因为您希望该类的用户拥有该事件。