Как я могу создать собственное событие? - PullRequest
0 голосов
/ 26 января 2011

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

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

1 Ответ

2 голосов
/ 26 января 2011

Поместите что-то вроде этого в ваш класс:

public event EventHandler NavigationItemClick;

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

В вашем методе navigationItemClick вы можете сделать это для вызова события.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...