2011-01-26 5 views
0

У меня есть пользовательский набор 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).

Что было бы лучшим способом? Я хотел бы создать что-то хорошее, а не взломанный код. Благодаря!

ответ

2

Put что-то подобное в своем классе:

public event EventHandler NavigationItemClick; 

Это создает новое событие в своем классе с именем NavigationItemClick. Дизайнер формы даже увидит это.

В вашем методе navigationItemClick вы можете сделать это, чтобы позвонить по этому мероприятию.

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

Важно, чтобы сохранить событие в переменную handler, чтобы избежать условий гонки. EventHandler - это делегат, поэтому вы называете его как метод, поэтому строка в операторе if. Сам if гарантирует, что кто-то присоединился к вашему мероприятию.

+0

В каком классе я могу создать это новое событие? –

+0

Я добавил EventHandler в класс NavigationItem.cs, и конструктор форм не может найти это конкретное событие. Какие-либо предложения? –

+0

@Sergio: Вы можете присоединить обработчик события в коде позади. –

Смежные вопросы