C# 如何创建自定义事件?

C# 如何创建自定义事件?,c#,winforms,events,user-controls,C#,Winforms,Events,User Controls,我有一组自定义的用户控件:NavigationBar和NavigationItem 我希望每当用户单击NavigationItem中的任何位置时,都会触发一个事件。我不知道怎么设置这个 我试过这个: public partial class NavigationBar : UserControl { public NavigationBar() { InitializeComponent(); SetupEvents(); }

我有一组自定义的用户控件:NavigationBar和NavigationItem

我希望每当用户单击NavigationItem中的任何位置时,都会触发一个事件。我不知道怎么设置这个

我试过这个:

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类,因为您希望该类的用户拥有该事件。