Как создать обработчик события нажатия на кнопку в visual studio
Для того чтобы перехватить событие, нужно создать его обработчик. Обработчик события по сути является методом, который регистрируется на отлов определенного события от определенного элемента управления/формы/компонента. Когда наступит событие, то этот самый элемент управления/форма/компонент вызовет метод, в котором мы можем написать код реакции на событие.
С помощью визуального дизайнера Visual Studio создание обработчиков событий превращается в тривиальную задачу. На рис. 5.8 показана панель Properties в режиме просмотра событий. Чтобы увидеть что-то подобное, нужно выделить компонент, событие которого вы хотите поймать, и нажать кнопку Events в панели Properties (на рис. 5.8 эта кнопка обведена кружком). Чтобы вернуться обратно к просмотру свойств, надо щелкнуть по кнопке Properties, которая находится левее.
Рис. 5.8. Панель Properties при просмотре событий
Теперь, чтобы создать нужный обработчик события, достаточно щелкнуть двойным щелчком в поле справа от имени события. Среда разработки создаст необходимое событие, добавит его регистрацию в своем методе InitializeComponent(), переключится в режим кода и установит курсор в тело метода, созданного для обработки события.
Давайте создадим обработчик события MouseClick. Выделите форму, перейдите в панели Properties в режим просмотра событий Events и щелкните двойным щелчком напротив события. Будет создан метод Form1_MouseClick():
Очень интересным является вопрос о том, какие события получает форма, когда появляется и уничтожается. При загрузке формы генерируются следующие события и именно в такой последовательности:
- Load — загрузка;
- Activate — активация;
- VisibleChanged — изменилось свойство Visible.
- А при закрытии формы генерируются следующие события:
- Deactivated — деактивировано;
- Closing — закрытие формы (можно отменить закрытие);
- Close — форма закрыта, и назад дороги нет.
Событие Load генерируется, когда вы впервые вызываете метод Show() для отображения формы. Посмотрим на следующий пример:
Событие Load будет сгенерировано только при первом вызове метода Show(), потому что в этот момент начнет происходить загрузка формы. Когда мы вызываем метод Hide(), то форма остается загруженной, просто прячется с экрана. Следующий вызов метода Show() только изменяет видимость окна, а загрузки не произойдет, поэтому и событие Load больше генерироваться не станет.
Очень часто у вас будут возникать казусы со случайным созданием событий. Например, если щелкнуть двойным щелчком по компоненту в визуальном дизайнере, то будет создан обработчик события по умолчанию для этого компонента. Так, для кнопки событием по умолчанию является Click, и если вы случайно щелкнете двойным щелчком по компоненту в визуальном дизайнере, то будет создан такой обработчик события. А если вы не хотели его создавать? Оставлять заготовку метода в коде? Наверное, лучше, все же, убрать обработчик события, чтобы он не мешал. Как это сделать?
Существует несколько вариантов:
- Выделите компонент в визуальном дизайнере и перейдите в режим Events в панели свойств. Напротив события удалите в поле название метода, созданного для обработчика события. Визуальный редактор удалит регистрацию события, которую он автоматически добавил в свой метод InitializeComponent(). Если в обработчике события не было кода, то заготовка для метода исчезнет и из кода.
- Если обработчик события содержит код, но он уже не нужен, то можно сначала удалить код из обработчика события, а потом выполнить действия из предыдущего пункта.
- Если обработчик события содержит код, то можно сначала удалить имя обработчика события в режиме Events панели свойств, а потом безболезненно удалить код метода.
Если вы создали обработчик события и тут же удалили метод в редакторе кода, то при этом среда разработки не удалит регистрацию события в методе InitializeComponent(). Это придется делать вручную. Как это сделать безболезненно? Давайте посмотрим на примере.
Создайте новое приложение и поместите на его форму кнопку. Щелкните по кнопке двойным щелчком, и среда разработки переключит вас в редактор кода с созданным для обработки события методом:
События для элементов управления (и для форм) обычно задаются с помощью визуального конструктора Visual Studio для Windows Forms. Настройка события с помощью визуального конструктора называется обработкой события во время разработки. Вы также можете динамически обрабатывать события в коде - это называется обработкой событий во время выполнения. Событие, созданное во время выполнения, позволяет динамически подключать обработчики событий на основе текущих действий приложения.
Обработка события — конструктор
В Visual Studio используйте визуальный конструктор для управления обработчиками событий элементов управления. Визуальный конструктор создаст код обработчика и добавит его в событие.
Установка обработчика
Используйте панель Свойства, чтобы добавить или задать обработчик события:
Откройте визуальный конструктор формы, содержащей элемент управления, который нужно изменить.
Выберите элемент управления.
Измените режим панели Свойства на События, нажав кнопку событий ( ).
Найдите событие, к которому нужно добавить обработчик, например событие Click:
Выполните одно из следующих действий.
Дважды щелкните событие, чтобы создать новый обработчик. Оно пусто, если обработчик не назначен. Если оно не пусто, это действие открывает код формы и переходит к существующему обработчику.
Используйте поле выбора ( ) для выбора существующего обработчика.
В поле выбора будут перечислены все методы, имеющие совместимую сигнатуру метода для обработчика событий.
Очистка обработчика
Чтобы удалить обработчик событий, нельзя просто удалить код обработчика, который находится в файле кода программной части формы, на него по-прежнему ссылается событие. Используйте панель Свойства, чтобы удалить обработчик события:
Откройте визуальный конструктор формы, содержащей элемент управления, который нужно изменить.
Выберите элемент управления.
Измените режим панели Свойства на События, нажав кнопку событий ( ).
Найдите событие, содержащее обработчик, который требуется удалить, например событие Click:
Щелкните событие правой кнопкой мыши и выберите Сбросить.
Обработка события - код
Обычно обработчики событий добавляются в элементы управления во время разработки с помощью визуального конструктора. Однако, можно создавать элементы управления во время выполнения, что требует добавления обработчиков событий в код. Добавление обработчиков в код также дает возможность добавить несколько обработчиков в одно и то же событие.
Добавление обработчика
В следующем примере показано, как создать элемент управления и добавить обработчик событий. Этот элемент управления создается в обработчике событий Button.Click другой кнопкой. При нажатии Кнопки1. Код перемещает новую кнопку и изменяет ее размер. Событие новой кнопки Click обрабатывается методом MyNewButton_Click . Чтобы появилась новая кнопка, она добавляется в коллекцию формы Controls . Существует также код для удаления обработчика события Button1.Click , который рассматривается в разделе Удаление обработчика.
Чтобы выполнить этот код, выполните следующие действия в форме с помощью визуального конструктора Visual Studio:
- Добавьте новую кнопку в форму и назовите ее Кнопка1.
- Измените режим панели Свойства на События, нажав кнопку событий ( ).
- Дважды щелкните по событию Нажать, чтобы создать обработчик. Это действие открывает окно кода и создает пустой метод Button1_Click .
- Замените код метода приведенным выше кодом.
Удаление обработчика
В разделе Добавление обработчика использовался код для демонстрации добавления обработчика. Этот код также содержит вызов для удаления обработчика:
Этот синтаксис можно использовать для удаления любого обработчика событий из любого события.
Использование нескольких событий с одним и тем же обработчиком
На панели Свойства визуального конструктора Visual Studio можно выбрать тот же обработчик, который уже используется другим событием. Следуйте указаниям в разделе Настройка обработчика, чтобы выбрать существующий обработчик вместо создания нового.
Visual Basic
В Visual Basic обработчик присоединяется к событию элемента управления в файле кода программной части формы, где объявляется код обработчика событий. В код обработчика событий можно добавить несколько ключевых слов Handles , чтобы использовать его с несколькими событиями. Визуальный конструктор создаст ключевое слово Handles и добавит его в обработчик событий. Однако, это можно легко сделать самостоятельно для любого события и обработчика событий элемента управления, если сигнатура метода обработчика соответствует событию. Дополнительные сведения о событиях Visual Basic см. в разделе События (Visual Basic)
В этом коде показано, как один и тот же метод можно использовать в качестве обработчика для двух разных событий Button.Click :
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Происходит при щелчке элемента управления.
Тип события
Примеры
В следующем примере кода показано Click событие в обработчике событий.
Комментарии
Событие Click передается EventArgs в обработчик событий, поэтому оно указывает только на то, что произошло нажатие. Если вам нужны более конкретные сведения о мыши (кнопка, количество щелчков, поворот колесика или расположение), используйте MouseClick событие. Однако событие не вызывается, MouseClick если нажатие кнопки вызвано действием, отличном от действия мыши, например нажатием клавиши ВВОД.
Двойной щелчок определяется параметрами мыши операционной системы пользователя. Пользователь может задать время между нажатиями кнопки мыши, которые будут считаться двойным щелчком, а не двумя отдельными щелчками. Событие Click вызывается каждый раз, когда элемент управления дважды щелкается. Например, если у вас есть обработчики событий для Click событий и DoubleClick событий, FormClick и DoubleClick события вызываются при двойном щелчке формы и вызове обоих методов. Если элемент управления дважды щелкается и этот элемент управления не поддерживает DoubleClick событие, Click событие может вызываться дважды.
Для этого события необходимо задать StandardClick значение ControlStyles true , которое должно быть создано.
Следующие события не создаются для TabControl класса, если в TabControl.TabPages коллекции нет хотя бы одного TabPage события: Click, , DoubleClick, , MouseUpMouseDown, MouseHoverи MouseEnterMouseLeave MouseMove. Если в коллекции есть хотя бы один TabPage , а пользователь взаимодействует с заголовком элемента управления tab (где TabPage отображаются имена), TabControl вызывает соответствующее событие. Однако если взаимодействие пользователя находится в клиентской области страницы вкладок, TabPage вызывает соответствующее событие.
Дополнительные сведения об обработке событий см. в разделе "Обработка и создание событий".
Примечания для наследутелей
Наследование от стандартного элемента управления Windows Forms и изменение или StandardDoubleClick изменение StandardClick значений может привести к true непредвиденному поведению или вообще не оказывает никакого ControlStyles влияния, если элемент управления не поддерживает Click или DoubleClick события.
В следующей таблице перечислены Windows Forms элементы управления и событие (ClickилиDoubleClick) вызывается в ответ на указанное действие мыши.
Control | Щелчок левой кнопкой мыши | Двойной щелчок левой мыши | Щелчок правой кнопкой мыши | Двойной щелчок правой кнопкой мыши | Щелчок посередине мыши | Двойной щелчок посередине мыши | XButton1 Mouse Click | Double-Click мыши XButton1 | Щелчок мыши XButton2 | Double-Click мыши XButton2 |
---|---|---|---|---|---|---|---|---|---|---|
MonthCalendar, DateTimePicker, HScrollBar, VScrollBar | нет | нет | нет | нет | нет | нет | нет | нет | нет | нет |
Button, CheckBox, RichTextBox, RadioButton | Щелкните | Щелкните, щелкните | нет | нет | нет | нет | нет | нет | нет | нет |
ListBox, CheckedListBox, ComboBox | Щелкните | Щелкните, DoubleClick | нет | нет | нет | нет | нет | нет | нет | нет |
TextBox, DomainUpDown, NumericUpDown | Щелкните | Щелкните, DoubleClick | нет | нет | нет | нет | нет | нет | нет | нет |
* TreeView, * ListView | Щелкните | Щелкните, DoubleClick | Щелкните | Щелкните, DoubleClick | нет | нет | нет | нет | нет | нет |
ProgressBar, TrackBar | Щелкните | Щелкните, щелкните | Щелкните | Щелкните, щелкните | Щелкните | Щелкните, щелкните | Щелкните | Щелкните, щелкните | Щелкните | Щелкните, щелкните |
Form, DataGrid, Label, LinkLabel, Panel, GroupBox, PictureBox, Splitter, StatusBar, ToolBar, TabPage, ** TabControl | Щелкните | Щелкните, DoubleClick | Щелкните | Щелкните, DoubleClick | Щелкните | Щелкните, DoubleClick | Щелкните | Щелкните, DoubleClick | Щелкните | Щелкните, DoubleClick |
* Указатель мыши должен быть над дочерним объектом (TreeNode или ListViewItem).
Помогите пожалуйста! Есть программно создаваемые кнопки в количестве, зависящем от введенного в TextBox числа. Нужно задать программный код на нажатие каждой кнопки. Но не получается создать событие Click для новых кнопок. Фрагмент кода:
Но выдается ошибка на выражение в скобках: "требуется имя метода". Думал проблема в индексах [i], но даже для созданной в качестве эксперимента кнопки:
Привязать обработчик события для программно добавленного элемента управления
Такая проблема. Программно создаю DataGridView при добавлении новой вкладки на tabControl.
Массив программно созданных кнопок и событие к каждому из них
Предположим, у меня есть List<string>. Для каждого string нужно создать Button. Каждому Button.
Сделать ожидание события клика на программно созданных pictureBox
Как сделать ожидание события клика на программно созданных pictureBox? Пробовал через Sleep, но он.
не те аргументы передаете делегату
Решение
вот пример добавьте в референс System.Windows.Forms и System.Drawing
XRoy,
возможно в этом и проблема: в тех примерах, которые я смотрел ничего не сказано про то, что метод нужно создать, просто приводится как само собой разумеющееся. А как это сделать? Или как задать возможность использования события по-другому?
XRoy,
похоже для but подходит, по крайней мере ругаться перестал, но в виде массива, например для bt[1] Click не задается. Наверно, надо прописать свойство Name, чтобы имена получались без скобок?
_exp10der_,
а как в вашем варианте теперь написать код на нажатие кнопки, например bt[1]?
Решение
простите уж за дотошность (или тупость)?
Добавлено через 3 минуты
_exp10der_,
да теорию я читал, но пока не разберу и не применю это в конкретной программе - не доходит.
в этом блоке и пишут что должно происходить и оно будет происходить при наступлении события(т.е вызываться этот метод)
_exp10der_,
метод работает, спасибо большое. Только static пришлось убрать, чтобы видеть переменные. Единственная проблема в том, что число кнопок заранее неизвестно, и может быть от 2 до 10. Писать для 10 ("с запасом") свой MyMetod не хочется. Попробую, конечно, внутри одного метода задать варианты для разных кнопок, в зависимости от их количества и номера, но если вам известны какие-то более простые способы решения этой проблемы, буду очень признателен.
Всё некогда было «поставить точку» или многоточие , хотя задачу, благодаря _exp10der_ и XRoy, добил уже давно. Наконец, есть возможность выложить код – может, кому пригодится. Суть задачи была в том, чтобы из имеющегося списка со множественным выбором (checkedListBox1) при наличии слишком большого количества записей, можно было составить задаваемое вручную (textBox1) количество (не больше 10) списков (lb) с подписями (la) и кнопками (bt) для заполнения списков выбранными в checkedListBox1 конкретными значениями.
Как передать в обработчик события значение программно созданного pictureBox?
как передать в обработчик события значение программно созданного pictureBox? суть прилоения оно.
Создать массив кнопок, для каждой кнопок будет одинаковый обработчик
Всем привет! Нужна помощь в реализации такой задачи. Нужно создать массив кнопок, для каждой.
Как создать обработчик события для программно созданных реквизитов?
Добрый день. У меня такая проблема. При открытии формы элемента справочника у меня создаются.
Элементы управления представляют собой визуальные классы, которые получают введенные пользователем данные и могут инициировать различные события. Все элементы управления наследуются от класса Control и поэтому имеют ряд общих свойств:
Anchor : Определяет, как элемент будет растягиваться
BackColor : Определяет фоновый цвет элемента
BackgroundImage : Определяет фоновое изображение элемента
ContextMenu : Контекстное меню, которое открывается при нажатии на элемент правой кнопкой мыши. Задается с помощью элемента ContextMenu
Cursor : Представляет, как будет отображаться курсор мыши при наведении на элемент
Dock : Задает расположение элемента на форме
Enabled : Определяет, будет ли доступен элемент для использования. Если это свойство имеет значение False, то элемент блокируется.
Font : Устанавливает шрифт текста для элемента
ForeColor : Определяет цвет шрифта
Location : Определяет координаты верхнего левого угла элемента управления
Name : Имя элемента управления
Size : Определяет размер элемента
Width : ширина элемента
Height : высота элемента
TabIndex : Определяет порядок обхода элемента по нажатию на клавишу Tab
Tag : Позволяет сохранять значение, ассоциированное с этим элементом управления
Кнопка
Наиболее часто используемым элементом управления является кнопка. Обрабатывая событие нажатия кнопки, мы может производить те или иные действия.
При нажатии на кнопку на форме в редакторе Visual Studio мы по умолчанию попадаем в код обработчика события Click , который будет выполняться при нажатии:
Оформление кнопки
Чтобы управлять внешним отображением кнопки, можно использовать свойство FlatStyle. Оно может принимать следующие значения:
Flat - Кнопка имеет плоский вид
Popup - Кнопка приобретает объемный вид при наведении на нее указателя, в иных случаях она имеет плоский вид
Standard - Кнопка имеет объемный вид (используется по умолчанию)
System - Вид кнопки зависит от операционной системы
Изображение на кнопке
Как и для многих элементов управления, для кнопки можно задавать изображение с помощью свойства BackgroundImage. Однако мы можем также управлять размещением текста и изображения на кнопки. Для этого надо использовать свойство TextImageRelation . Оно приобретает следующие значения:
Overlay : текст накладывается на изображение
ImageAboveText : изображение располагается над текстом
TextAboveImage : текст располагается над изображением
ImageBeforeText : изображение располагается перед текстом
TextBeforeImage : текст располагается перед изображением
Например, установим для кнопки изображение. Для этого выберем кнопку и в окне Свойств нажмем на поле Image (не путать с BackgroundImage). Нам откроется диалоговое окно установи изображения:
В этом окне выберем опцию Local Resource и нажмем на кнопку Import , после чего нам откроется диалоговое окно для выбора файла изображения.
После выбора изображения мы можем установить свойство ImageAlign , которое управляет позиционированием изображения на кнопке:
Нам доступны 9 вариантов, с помощью которых мы можем прикрепить изображение к определенной стороне кнопки. Оставим здесь значение по умолчанию - MiddleCenter , то есть позиционирование по центру.
Затем перейдем к свойству TextImageRelation и установим для него значение ImageBeforeText . В итоге мы получим кнопку, где сразу после изображения идет надпись на кнопке:
Клавиши быстрого доступа
При работе с формами при использовании клавиатуры очень удобно пользоваться клавишами быстрого доступа. При нажатии на клавиатуре комбинации клавиш At+некоторый символ, будет вызываться определенная кнопка. Например, зададим для некоторой кнопки свойство Text равное &Аватар . Первый знак - амперсанд - определяет ту букву, которая будет подчеркнута. В данном случае надпись будет выглядеть как А ватар. И теперь чтобы вызвать событие Click, нам достаточно нажать на комбинацию клавиш Alt+А.
Кнопки по умолчанию
Форма, на которой размещаются все элементы управления, имеет свойства, позволяющие назначать кнопку по умолчанию и кнопку отмены.
Так, свойство формы AcceptButton позволяет назначать кнопку по умолчанию, которая будет срабатывать по нажатию на клавишу Enter.
Аналогично работает свойство формы CancelButton , которое назначает кнопку отмены. Назначив такую кнопку, мы можем вызвать ее нажатие, нажав на клавишу Esc.
Читайте также: