如何创建自定义事件?

时间:2011-01-26 00:32:23

标签: c# winforms events user-controls

我有一组自定义UserControls:NavigationBar和NavigationItem。

我希望每当用户点击NavigationItem中的任何地方时,就会触发一个事件。我不知道如何设置它。

http://i.stack.imgur.com/ocP2D.jpg

我试过这个:

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());
    }
}

但该事件仅在用户专门单击NavigationItem控件时触发,而不是在他单击图片或文本时触发。 (那些是PictureBox和Label)。

什么是最好的行动方案?我想创造一些好东西,而不是hacky代码。谢谢!

1 个答案:

答案 0 :(得分:2)

将类似的东西放入你的班级:

public event EventHandler NavigationItemClick;

这会在名为NavigationItemClick的类中创建一个新事件。表单设计师甚至会看到它。

在您的方法navigationItemClick中,您可以执行此操作来调用该事件。

EventHandler handler = this.NavigationItemClick;
if (handler != null)
{
    handler(this, EventArgs.Empty);
}

将事件保存到handler变量以避免竞争条件非常重要。 EventHandler是一个委托,因此您将其称为方法,因此if语句中的行。 if本身可确保有人附加到您的活动中。