Событие щелчка пользователем не работает при нажатии на текст внутри элемента управления? - PullRequest
6 голосов
/ 13 марта 2012

У меня есть пользовательский элемент управления под названием GameButton, внутри которого есть метка. Когда я добавляю пользовательский элемент управления в свою форму и добавляю в нее событие щелчка, оно срабатывает при нажатии на фон пользовательской кнопки, но не на текст в метке? Как бы это исправить, не добавляя кучу событий щелчка в коде пользовательских элементов управления?

редактировать: UI framework: winforms

Ответы [ 2 ]

11 голосов
/ 13 марта 2012

Если я правильно вас понимаю, ваш пользовательский контроль GameButton будет запускать событие при нажатии, но не при нажатии на ярлык - и вам нужны оба.Это потому, что метка (элемент управления) находится сверху фона.Поэтому вам также необходимо зарегистрировать свой ярлык с событием click.Это можно сделать вручную в конструкторе или программно для каждого элемента управления на странице.

Если вы хотите использовать КАЖДЫЙ элемент управления в UserControl, поместите его в событие OnLoad UserControl, и вы можете использовать одно и то же событие щелчка для каждого элемента управления:

foreach(Control c in this.Controls){
    c.Click += new EventHandler(yourEvent_handler_click);
}

public void yourEvent_handler_click (object sender, EventArgs e){
    //whatever you want your event handler to do
}

РЕДАКТИРОВАТЬ: лучший способзаключается в создании свойства обработчика события click в пользовательском элементе управления.Таким образом, каждый раз, когда вы добавляете / удаляете событие щелчка для своего пользовательского элемента управления, оно автоматически добавляет / удаляет его для всех элементов управления в пользовательском элементе управления.

public new event EventHandler Click {
        add {
            base.Click += value;
            foreach (Control control in Controls) {
                control.Click += value;
            }
        }
        remove {
            base.Click -= value;
            foreach (Control control in Controls) {
                control.Click -= value;
            }
        }
    }

Это как в другой записи :

Надеюсь, это поможет!

1 голос
/ 04 июня 2017

Сделайте свойство "enable" ваших ярлыков "False", тогда события мыши будут работать в пользовательском управлении.

...