繁体   English   中英

如何创建自定义事件?

[英]How can I create a custom event?

我有一个自定义的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代码。 谢谢!

在您的班级中输入以下内容:

public event EventHandler NavigationItemClick;

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

在方法navigationItemClick您可以执行此操作以调用事件。

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

将事件保存到handler变量中很重要,以避免出现竞争情况。 EventHandler是一个委托,因此您可以像调用方法一样调用它,因此if语句中的行。 if本身可确保有人已加入您的活动。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM