Как создать обработчик события нажатия на кнопку в visual studio

Обновлено: 05.07.2024

Задумался над тем как правильно обрабатывать событие Click , в том плане, что не просто писать кучу кода вместо do something , а сделать это по крайней мере в стиле ООП. Вопрос 1. Подскажите пожалуйста, как решают этот вопрос при разработке коммерческих программ?

Сейчас я делаю примерно так

Я думаю суть понятна. Вопрос 2. Подскажите пожалуйста, правильно ли я делаю, написав код таким образом?

Всем большое спасибо за ответы!

801 1 1 золотой знак 10 10 серебряных знаков 28 28 бронзовых знаков @AlexanderPetrov, Не будьте так категоричны. Представьте, что эта кнопка только добавляет данные в базу. Мой вопрос в том, правильно ли я организовываю обработку нажатия на кнопку. Если нет, не могли бы вы показать как правильно? Для winforms обычно следуют шаблону MVP => Model-View-Presenter. То, что вы пытаетесь сделать в классе Department c department.Add() делают в классе презентера. Класс презентера подписывается на события из вьюшки, которая реализует IMyView. @Bulson, Можно вас попросить предложить какой-нибудь пример в качестве ответа (в идеале) или ссылку на гитхаб? Я плюсану :) Посмотрите простейший пример на этом видео. Это очень простой пример, но с него можно начать и его легко понять.

В этом видео дается самый простой пример MVP, без привязок и с простейшей переброской событий от кнопок в Presenter . Если вы начнете писать что-то более серьезное, то быстро осознаете необходимость работы с привязками, потому стоит внимательно ознакомиться с классом BindingSource.

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

1) Пример на простейшее событие выбора в ComboBox

Создадим такой класс, который потом будет использовать для создания свойства в форме

Тогда вьюшка будет такой

А презентер такой

2) Событые имеет значемые для презентера параметры.

Создадим такой класс посредник

Параметры в презентер будем передовать в словаре вот так

3) Пример на кнопки с привязкой к свойствам Enabled и Text

Для кнопки слева сделана привязка к свойству Enabled с помощью такого класса

Для кнопки справа используется привязка к свойствам Enabled и Text

Презентер к ней

4) Кнопка на ToolStrip

Имеет такую особенность, что у нее изначально нет поддержки привязок. Поэтому нам понадобится такой класс унаследованный класс кнопки

После добавления в проект такого класса и компиляции эту кнопку можно будет добавить к тулбар и работать с ней таким образом

Вот, пожалуй, основные примеры на обработку всевозможных событий. Ответ и так получился слишком объемным, так что пример на работу с несколькими формами вы сможете посмотреть сами скачав решение со всеми этими примерами здесь.

Игра "Подбери пару!" работает следующим образом.

Когда игрок выбирает один из квадратов со скрытым значком, программа показывает значок игроку, изменяя цвет значка на черный.

После этого игрок выбирает другой скрытый значок.

Если значки совпадают, они остаются видимыми. Если нет, оба значка снова скрываются.

Чтобы программа работала именно так, добавьте обработчик событий Click, изменяющий цвет выбираемого элемента управления Label.

Добавление обработчика событий Click к каждому элементу управления Label

Откройте форму в конструкторе Windows Forms. В обозревателе решений выберите Form1.cs или Form1.vb. В строке меню выберите Вид > Конструктор.

Выберите первый элемент Label, чтобы выделить его. Затем, удерживая нажатой клавишу CTRL, выберите каждую из оставшихся меток. Убедитесь, что выбраны все метки.

Окно свойств, отображающее событие Click

Нажмите клавишу ВВОД. Интегрированная среда разработки добавит обработчик событий Click , который называется label_Click() , в код и подключит его к каждому элементу управления Label в форме.

Добавьте остальную часть кода следующим образом:

Элемент управления языка программирования для Docs.Microsoft.com

При копировании и вставке блока кода label_Click() вместо его ввода вручную проследите за тем, что заменить существующий код label_Click() . В противном случае в коде появится дублирующий блок.

Возможно, вы узнали object sender в верхней части обработчика событий; он совпадает с кодом в руководстве по созданию ограниченной по времени математической головоломки. Так как вы подключили разные события Click элемента управления Label к одному методу обработчика событий, один и тот же метод вызывается независимо от того, какой элемент управления Label щелкнет пользователь. Методу обработчика событий необходимо знать, какой элемент управления Label выбрал игрок, поэтому для его определения используется имя sender . Первая строка метода сообщает программе, что это не просто универсальный объект, а элемент управления Label, для обращения к свойствам и методам которого используется имя clickedLabel .

В строке меню выберите Файл > Сохранить все, чтобы сохранить ход выполнения, а затем в строке меню выберите Отладка > Начать отладку, чтобы запустить программу. Вы должны увидеть пустую форму с синим фоном. Выберите любую ячейку в форме, и один из значков станет видимым. Продолжайте выбирать различные ячейки формы. Значки будут отображаться при их выборе.

Элементы управления представляют собой визуальные классы, которые получают введенные пользователем данные и могут инициировать различные события. Все элементы управления наследуются от класса 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 , которое управляет позиционированием изображения на кнопке:

ImageAlign

Нам доступны 9 вариантов, с помощью которых мы можем прикрепить изображение к определенной стороне кнопки. Оставим здесь значение по умолчанию - MiddleCenter , то есть позиционирование по центру.

Затем перейдем к свойству TextImageRelation и установим для него значение ImageBeforeText . В итоге мы получим кнопку, где сразу после изображения идет надпись на кнопке:

Кнопка с изображением в Windows Forms

Клавиши быстрого доступа

При работе с формами при использовании клавиатуры очень удобно пользоваться клавишами быстрого доступа. При нажатии на клавиатуре комбинации клавиш At+некоторый символ, будет вызываться определенная кнопка. Например, зададим для некоторой кнопки свойство Text равное &Аватар . Первый знак - амперсанд - определяет ту букву, которая будет подчеркнута. В данном случае надпись будет выглядеть как А ватар. И теперь чтобы вызвать событие Click, нам достаточно нажать на комбинацию клавиш Alt+А.

Кнопки по умолчанию

Форма, на которой размещаются все элементы управления, имеет свойства, позволяющие назначать кнопку по умолчанию и кнопку отмены.

Так, свойство формы AcceptButton позволяет назначать кнопку по умолчанию, которая будет срабатывать по нажатию на клавишу Enter.

Аналогично работает свойство формы CancelButton , которое назначает кнопку отмены. Назначив такую кнопку, мы можем вызвать ее нажатие, нажав на клавишу Esc.

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

заместо button_1 нужно сделать например button_2,button_3 и т.д. кнопок очень много.

60 1 1 золотой знак 1 1 серебряный знак 9 9 бронзовых знаков Все кнопки можно подписывать на один и тот же обработчик события. В обработчик приходить параметром sender , приводите его к типу Button и либо по названию, либо по тегу вы сможете определить от какой кнопки пришло событие. а по тегу это как ? Вот например я нажатую кнопку пихаю в массив кнопок,наращиваю значение флага,и так по очереди,и проверяю последнюю с предпоследним (ничего не выходит), потом при попытке оттуда достать и что-либо сделать но пишет System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объекта." ?

К примеру у нас есть такой код, который добавляет на нашу форму 10 кнопок:

Как мы можем узнать кнопку? Для этого нужен какой либо идентификатор, возьмем к примеру имя, пусть оно будет btn . Добавим после строки button.Top = top; еще одну строку button.Name = "btn" + i; .

Далее, как нам отследить нажатие? Для этого нужно подписаться на событие. Стандартный вариант - Click - событие, которое происходит при клике мышью по объекту. Для всех наших кнопок достаточно всего одного обработчика событий! Давайте добавим еще одну строку в свойство кнопки - button.Click += ButtonOnClick; .

Хорошо, с генерацией покончили, теперь наш код выглядит так:

Но! Мы не добавили то, что будет выполнятся при нажатие на кнопку, давайте напишем:

Хорошо, ошибок нет, должно все работать. Но, нужно ведь наделить каким то функционалом наши кнопки. Давайте в ButtonOnClick добавим определение нажатой кнопки и ее удаление:

Давайте по порядку:

Чтож, вроде все разложил "по полочкам" как мог, с этой частью думаю трудностей не возникнет. Удачи!

как мне определить не ту кнопку которую сейчас нажали, а ту, которая была нажата до нее.

Создадим где нибудь приватный объект Button , который будет хранить информацию о последней нажатой кнопке:

Далее, к примеру, при нажатие 2 раза на кнопку, сделаем так, что бы она удалялась. Для этого перепишем наше событие ButtonOnClick :

Прежде чем написать программу «Привет», давайте определимся, что будет делать программа и как она должна выглядеть в действии.

После запуска программы должно появиться окно приложения. Окно должно содержать две кнопки (Привет и Очистить) и пустое текстовое поле (рис.1.1).

Первое приложение

Рис.1.1. Внешний вид приложения

Если щелкнуть мышью на кнопке Привет, в текстовом поле появится надпись "Здравствуй, Мир!" (рис.1.2)

Запущенное приложение

Рис.1.2. Приложение в действии.

Если щелкнуть мышью на кнопке Очистить, программа очищает текстовое поле.

Создание нового проекта

Как видите, Visual Studio позволяет создавать проекты разных типов. Для нашего первого урока мы будем использовать проект типа Windows Forms Application. Выделите мышкой шаблон Windows Forms Application. Далее измените имя проекта. В поле Name удалите текст по умолчанию WindowsFormsApplication1 и введите текст MyFirstProgram. Следующее поле Location показывает место, где будет храниться ваш проект. Вы можете изменить место хранения проекта. Для этого щелкните кнопку Browse. и выберите папку на вашем компьютере. Теперь можно щелкнуть кнопку OK.

Создание нового проекта

Рис.1.3. Создание нового проекта

У вас откроется среда разработки Visual Studio. В центре экрана вы увидите окно формы (пока пустое) с заголовком Form1. Ваша задача - сделать его похожим на форму готового приложения

Пустая форма

Рис.1.4. Пустая форма

Изменяем заголовок формы

Пустая форма, которая появилась у вас на экране, имеет заголовок Form1. Эту стандартную надпись в заголовке Visual Studio присваивает любой вновь созданной форме. В учебных целях вы можете оставлять эту надпись без изменений, но давайте сделаем форму более профессиональной. В нашей первой программе заголовок имеет надпись Привет.

Примечание: Форму часто называют окном. В принципе это одно и то же. Во время разработки мы будем использовать термин форма, а во время работы программы эту форму на экране будем называть окном.

Итак, изменим заголовок у формы на Привет

Убедитесь, что окно формы является текущим. Это легко распознать по заголовку - оно должно быть активным (подсвеченным). Если форма не является текущим, то просто щелкните мышью в любом месте формы или по заголовку.

В правой части среды разработки найдите окно Properties. Если оно у вас скрыто, то в меню View выберите команду Properties Windows.

Щелкните на поле, расположенном справа от надписи Text. В данный момент поле содержит текст Form1. Удалите этот текст и введите новый текст Привет. Окно свойств должно принять вид, как на рис 1.5.

Изменяем заголовок у формы

Рис.1.5. Изменяем заголовок у формы

Ура! Вы изменили заголовок формы. Взгляните на окно формы - надпись изменилась (рис.1.6).

Форма с новым заголовком

Рис.1.6. Форма с новым заголовком.

Добавляем кнопку

Мы знаем, что в окончательном варианте на форме должны быть кнопки Привет и Очистить. Давайте сделаем это.

Чтобы поместить кнопку на форму, сначала выберите ее в коллекции инструментов.

Окно коллекции инструментов содержит значки различных элементов управления. Ваша задача - выбрать нужный объект и поместить его на форму.

Примечание: Если коллекция инструментов не видна, то в меню View выберите команду Toolbox.

Найдите среди значков нужный элемент с надписью Button.

Дважды щелкните на значке кнопки - в результате Visual Studio поместит кнопку с надписью Button на форму (рис.1.7).

Помещаем кнопку на форму

Рис.1.7. Помещаем кнопку на форму

Visual Studio автоматически присвоила некоторые свойства для нашей кнопки. Мы должны изменить их для нашего удобства, как это мы сделали для заголовка формы.

Перейдите на панель Properties (если она невидима, то выполните команду Properties Window из меню ё1)

Убедитесь, что поле списка в верхней части окна свойств содержит надпись button1 System.Windows.Forms.Button (рис.1.6)

Примечание: На данном этапе к вашей форме относятся два объекта: сама форма Form1 и кнопка button1. Окно свойств отображает свойства того объекта, чье имя выбрано в свернутом списке вверху окна. Чтобы переключиться на другой объект, щелкните на кнопке со стрелкой в поле списка и разверните список: он содержит имена всех элементов формы. Щелкните на имени нужного вам элемента, и окно Properties отобразит набор свойств этого элемента.

Измените значение свойства Name с button1 на butHello.

Новое имя для кнопки

Рис.1.8. Присваиваем новое имя кнопке

По умолчанию, Visual Studio присвоило кнопке надпись button1, которую вы видите сейчас на кнопке. Давайте изменим ее на более понятную надпись. Находим свойство Text и изменяем текст button1 на Привет.

Изменяем положение кнопки

Кнопка в нашем варианте должна находиться не в углу формы, а чуть ниже.

Перетащите ее в нижнюю часть формы: поместите указатель мыши на кнопку Привет, нажмите на кнопку мыши и, не отпуская кнопки мыши, переместите кнопку Привет в нужное место.

Изменяем свойство Font (Шрифт) у кнопки

Продолжим изменять свойства у кнопки. Снова переходим в окно свойств и щелкните на поле справа от надписи Font. При этом появится кнопка с тремя точками. Щелкните на этой кнопке. Появится диалоговое окно Font, позволяющее выбрать и установить новый шрифт.

Выберите нужный размер шрифта, например, 10. Щелкните на кнопке OK диалогового окна Font

Взгляните на кнопку: шрифт надписи Привет изменился.

Примечание: Изменяя значения у многих свойств, вы можете немедленно увидеть результат на форме. Пользуйтесь этим, экспериментируйте со свойствами выбранных элементов, пока результат не удовлетворит вас полностью.

Добавляем вторую кнопку

Теперь нам необходимо добавить на форму вторую кнопку с надписью Очистить. Повторяем уже знакомые операции. Дважды щелкаем на значке кнопки в коллекции инструментов. На форме появится вторая кнопка. Перетащите ее в правую часть формы рядом с первой кнопкой. Далее измените у кнопки свойства Name с button1 на butClear и свойство Text на текст Очистить. Также можете изменить размер шрифта.

Изменяем размеры кнопок

Первоначальные размеры, которые Visual Studio установил кнопкам, могут нам не подойти. Например, слово Очистить может оказаться слишком большим и не помещается целиком на кнопке. Давайте научимся изменять размеры кнопок.

Выберите нужный объект одиночным щелчком (не двойным!). Выбранный элемент будет заключен в прямоугольник из небольших белых квадратиков, которые называются маркерами. Аккуратно подведите указатель мыши к любому маркеру и, удерживая нажатой кнопку мыши, перетаскивайте маркер в нужном направлении, пока объект не примет требуемый размер. Например, маркеры на вертикальных гранях объекта меняют его горизонтальные размеры и наоборот. Маркеры на углах меняют размеры объекта в обоих направлениях одновременно.

Добавляем на форму текстовое поле TextBox

Остался еще один элемент, которого не хватает для нашей программы - это текстовое поле TextBox. Данный элемент предназначен для ввода любого текста. Иногда этот элемент называют полем редактирования.

Помещаем элемент TextBox на форму

У нас уже есть опыт добавления кнопок на форму. Теперь мы должны добавить текстовое поле. Найдите в коллекции инструментов значок текстового поля.

Двойным щелчком на значке Tex t Box поместите элемент на форму.

Выбрав его на форме, измените положение и размер элемента как показано на рисунке 1.9.

Первое приложение

Рис.1.9. Размещение всех элементов на форме

Изменяем значения свойств элемента TextBox

Измениим несколько свойств у текстового поля. Измените значение свойства Name с textBox1 на txtDisplay. По желанию, вы можете изменить размер шрифта.

Вводим исходный код

Этап визуального программирования на этом завершен. Мы сконструировали внешний вид программы. Теперь осталось ввести исходный код для программы.

Пишем процедуру для кнопки Привет (butHello)

Дважды щелкните на кнопке Привет (butHello). Visual Studio откроет окно программного кода. Обратите внимание, что Visual Studio автоматически поместил в окно программного кода строчки:

Как мы договаривались, при нажатии на кнопку в текстовом поле должна появиться надпись Здравствуй, Мир!. Поместите курсор между фигурными скобками < >и введите следующий код:

Обратите внимание, что когда вы набрали слово txtDispaly и поставили точку, то Visual Studio предложил вам выбрать уже готовые варианты для продолжения. Не обращайте пока внимания на подсказки и продолжайте набирать текст. Не забудьте поставить в конце строки точку с запятой.

Вводим код для кнопки Очистить

Снова переключитесь в режим визуального редактирования (View | Designer) и дважды щелкните на кнопке Очистить (butClear). Visual Studio снова сгенерирует заготовку для события Click второй кнопки. Задача этой процедуры заключается в очистке текстового поля. Для этого нужно присвоить для значения свойства Text пустую строку.

Выполняем программу Привет

Все готово для нашей первой программы. Пора проверить ее в действии. Выберите в меню Debug | Start Debugging.

Если вы не сделали ни одной ошибки, то у вас на экране появится окно нашей программы. Щелкните на кнопке Привет. В текстовом поле появится текст, который мы задали в коде программы. Теперь щелкните на кнопке Очистить. Текст исчезнет. Вы можете пощелкать по кнопкам несколько раз. Чтобы выйти из программы, нажмите на кнопку Закрыть в верхнем правом углу программы.

Когда вы выходите из программы, то можете снова вносить в нее изменения в Visual Studio. Попробуйте самостоятельно изменить программу таким образом, чтобы при щелчке на кнопке Привет в текстовом поле появилась надпись Привет, мама!.

Исполняемый файл EXE

Когда вы запустили программу в первый раз, то Visual Studio автоматически создал исполняемый файл EXE. Откройте папку, в котором вы сохраняли свой проект. Там найдите подпапку \bin\Debug, в которой увидите файл MyFirstProgram.exe.

Вы можете скопировать этот файл на флешку и передать ее своим знакомым, чтобы они увидели вашу программу на своем компьютере. На этом первый урок завершен.

Итоги

Читайте также: