我有一组自定义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代码。谢谢!
答案 0 :(得分:2)
将类似的东西放入你的班级:
public event EventHandler NavigationItemClick;
这会在名为NavigationItemClick
的类中创建一个新事件。表单设计师甚至会看到它。
在您的方法navigationItemClick
中,您可以执行此操作来调用该事件。
EventHandler handler = this.NavigationItemClick;
if (handler != null)
{
handler(this, EventArgs.Empty);
}
将事件保存到handler
变量以避免竞争条件非常重要。 EventHandler
是一个委托,因此您将其称为方法,因此if
语句中的行。 if
本身可确保有人附加到您的活动中。