Разница в поведении между button. click и label.click
Я обнаружил разницу в поведении между событием Click-Event от обоих этих элементов управления.
Событие Click (или OnClick-метод) из элемента управления Button вызывается примерно в 2 раза быстрее, чем то же событие (метод) из элемента управления Label (или Control).
Может ли кто - нибудь объяснить мне, почему-или лучше, что нужно сделать, чтобы оба элемента управления реагировали одинаково ?
Хорошо ... кто-то не стеснялся голосовать за мой вопрос (возможно, это просто, чтобы его задали) ... но никто не в состоянии дать ответ ... отлично...
Что я уже пробовал:
в данный момент понятия не имею ... :( ..
OriginalGriff
Как вы это проверяете?
Какие цифры вы получаете?
Ralf Meier
Я узнал об этом случайно.
У меня есть самостоятельно созданная кнопка управления, которая происходит от (Windows.Формы.)Контроль (я также проверил то же самое с выводом из Label или ButtonBase).
В своем приложении я работаю с событиями. Теперь у меня есть цель, которая может иметь быстрые нажатия кнопок. Здесь моя кнопка позволяет только несколько кликов. Если я изменю наследование (от моего элемента управления) на кнопку, я смогу работать с ней так, как захочу.
Так... отсюда и мой вопрос. Ничего (в коде) не изменилось, кроме наследования, но производительность сильно изменилась ...
Karthik_Mahalingam
Опубликуйте свой код
Ralf Meier
см. мой ответ на комментарий от OG ...
Karthik_Mahalingam
ладно
Ralf Meier
Я думаю, вы поняли мой вопрос совершенно неправильно. См. мой ответ на комментарий от OG ...
[no name]
Сравнивали ли вы время между событием Click и Переопределяемым методом OnClick в производном классе
Ralf Meier
Нет , я не сравниваю время. Я только сравнил реальную реакцию с моим "тест-приложением". Так... "В 2 раза быстрее" может быть предположением - на самом деле это также может быть в 1,5 раза быстрее или в 3 раза быстрее, - но есть разница, которую я не могу понять, потому что все эти элементы управления изначально происходят от контроля ...
Maciej Los
Кнопка-контроль поднимается примерно в 2 раза быстрее, чем то же событие (метод) из метки-контроля (или контроля). - Я считаю, что это утверждение не соответствует действительности!
Ralf Meier
Хорошо ... затем создайте форму, поместите на нее кнопку, метку и текстовое поле.
Теперь вы создаете метод, который переключает текст из текстового поля.
Подключите этот метод к кнопке.Click-Event также относится к метке.событие click.
Теперь переключите это на run и быстро нажмите на кнопку и посмотрите, как переключается содержимое текстового поля, а затем сделайте то же самое с меткой ...
В моем тестовом приложении (только для этого) Я мог бы нажать кнопку в 2 раза быстрее (чтобы получить реальный результат), чем метку ... Мое тестовое приложение делает только это-и ничего больше ... а также со стандартными-Windows-элементами управления ...
Maciej Los
Никакая разница... время исполнения-то же самое.
Ralf Meier
Не для меня ...
Я использую .Net-Framework 4.0
Но если я тебе поверю, Мацей, - какая разница ?..
0x01AA
Я могу подтвердить ваши наблюдения. Я просто погружаюсь в эталонную реализацию c# :)
[Редактировать]
Забавно: попробуйте нажать левую / правую кнопку мыши на этикетке. Как и эта метка, возьмите примерно ту же скорость клика, что и кнопка.
Кстати: см. комментарий в справочной реализации:
// Если бы не FormatControl, мы могли бы наследовать от ButtonBase и получать изображения переднего плана бесплатно.
метка публичного класса: контроль {
Ralf Meier
см. мой ответ на комментарий Алана Н ...
Но... спасибо, что подтвердили мою проблему. Я уже начал сомневаться в себе ... :(
Ralf Meier
Я проверил его еще раз. Теперь с щелчком мыши вместо щелчка.
Тот же результат-кнопка принимает гораздо больше кликов (и вынужденных реакций) за одно и то же время, чем метка ...
Но между прочим: я не говорил о времени казни. Я говорил о реальных Щелчковых реакциях ...
Maciej Los
Время щелчка-реакции все то же...
Ralf Meier
см. мой ответ на комментарий Алана Н ...
Так что я не понимаю, почему вы получили другие результаты, чем я ... !?
Alan N
Этот эффект может быть как-то связан с обнаружением двойного щелчка, который включен для меток и отключен для кнопок.
Ralf Meier
ОК... возможно, причина в этом. Чтобы обнаружить двойной щелчок, необходимо подождать некоторое время, чтобы увидеть, не появится ли еще один щелчок. Только по истечении этого времени событие могло быть поднято.
Также это соответствует моим собственным экспериментам :
Я создаю флаг, который устанавливается с помощью MouseDown и очищается с помощью MouseUp. Wenn MouseDown приходит, и флаг не установлен, я поднимаю событие. Теперь событие происходит так же быстро,как и при нажатии кнопки.
Приятный опыт ...