Работа с кнопками windows form

Практическое руководство. Обработка события нажатия кнопки в Windows Forms How to: Respond to Windows Forms Button Clicks

Самым простым использованием Button элемента управления Windows Forms является выполнение некоторого кода при нажатии кнопки. The most basic use of a Windows Forms Button control is to run some code when the button is clicked.

При щелчке Button элемента управления также создается ряд других событий, таких как MouseEnter события, MouseDown и MouseUp . Clicking a Button control also generates a number of other events, such as the MouseEnter, MouseDown, and MouseUp events. Если вы планируете присоединить обработчики событий для этих связанных событий, убедитесь, что их действия не конфликтуют. If you intend to attach event handlers for these related events, be sure that their actions do not conflict. Например, если нажать кнопку, чтобы очистить сведения, введенные пользователем в текстовое поле, при наведении указателя мыши на кнопку не должно отображаться всплывающая подсказка с несуществующими сведениями. For example, if clicking the button clears information that the user has typed in a text box, pausing the mouse pointer over the button should not display a tool tip with that now-nonexistent information.

Если пользователь пытается дважды щелкнуть Button элемент управления, каждый щелчок будет обрабатываться отдельно, то есть элемент управления не поддерживает событие двойного щелчка. If the user attempts to double-click the Button control, each click will be processed separately; that is, the control does not support the double-click event.

Реагирование на нажатие кнопки To respond to a button click

В этой кнопке Click EventHandler напишите код для выполнения. In the button’s Click EventHandler write the code to run. Button1_Click должен быть привязан к элементу управления. Button1_Click must be bound to the control. Дополнительные сведения см. в разделе инструкции. Создание обработчиков событий во время выполнения для Windows Forms. For more information, see How to: Create Event Handlers at Run Time for Windows Forms.

Введение в Windows Forms — пишем первую программу

В данной статье будет рассказано о том как написать простой обработчик событий на C++ для приложения Windows Forms, работающего под управления .NET Framework. Мы создадим простейшую Windows программу, которая вычисляет факториал целого числа. Для написания данной программы Вам понадобится Visual Studio 2008 Express Edition или Professional.

Для начала создадим проект.

Откроем Visual Studio, далее жмем Файл→Создать→Проект, далее выбираем пункт CLR и отмечаем Приложение Windows Forms, даем имя проекта, к примеру factr и жмем Ok.

После того как мы создали проект, должна появиться пустая форма, которая должна выглядеть примерно так:

Справа должна появиться панель элементов, если ее нет, то можно включить ее в меню Вид→Панель Элементов или нажатием горячих клавиш — Ctrl + Alt + X.

На ней расположены различные элементы для вставки в форму, нам понадобятся только элементы Button (Кнопка), Label (Надпись) и TextBox (Текстовое поле). Перетащите на форму три элемента Label, Два элемента TextBox, и одну кнопку (Button), расставьте элементы примерно так:

Теперь нам нужно будет изменить текст надписей для элементов Label и Button и Задать подходящие имена классов для элементов TextBox. Для этого Выделите элемент label1, перейдите в Панель свойств, (обычно она находится под Панелью элементов, если панель выключена, включите ее в меню Вид -> Диспетчер свойств.) и задайте для данного элемента значение атрибута Text как показано на рисунке.

Задайте атрибут Text для всех элементов Label и Кнопки Button аналогичным образом. Наша форма должна принять примерно следующий вид:

Читайте также:  Отличия windows 10 home от windows 10 ltsb

Я сделал кнопку развернуть неактивной, так как изменение размеров данной формы испортит ее внешний вид, Вы также можете это сделать, щелкнув левой кнопкой мыши на пустом месте формы и в Панели свойств задать для атрибута MaximizeBox параметр False.

Теперь задайте для текстовых полей (TextBox) Атрибуты Name в Панели Свойств – для первого поля это будет num1, а для второго, соответственно num2. Тем самым мы изменили имена классов для полей TextBox, чуть позднее Вы поймете зачем.

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

Первым делом нужно добавить заголовочный файл fact.h в проект, для этого щелкаем правой кнопкой мыши в Обозревателе решений на папке Заголовочные файлы, далее меню Добавить -> Создать Элемент, вписываем название файла – fact.h и нажимаем Добавить. В данном файле будет содержаться прототип функции для вычисления факториала. Добавляем туда следующий исходный код.

Далее подключаем этот файл к проекту с помощью директивы #include – Открываем файл factr.cpp и добавляем после строчки #include «stdafx.h» следующий код.

Теперь наш заголовочный файл подключен к проекту, далее аналогичным образом создаем файл исходного кода fact.cpp в проект.

В него добавляем саму функцию вычисления факториала целого числа.

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

Открываем файл Form.h, в нем мы видим визуальное представление нашей формы. Щелкаем двойным щелчком на кнопке Button и переходим к исходному коду.

После фигурной скобки ставим абзац и приступаем к кодированию. Любой набор символов, которые мы вводим с клавиатуры в текстовое поле программы является строкой, поэтому нам нужно вытащить значение из текстового поля и привести его к целочисленному типу. Это довольно сложная процедура, но, к счастью в языке C++ уже есть множество функций, выполняющих конвертирование типов данных. Сначала нам необходимо описать и инициализировать переменную, в которой будет храниться значение числа, для которого должен быть вычислен факториал. Добавим в том место, где Вы поставили абзац следующий код:

Эта строка инициализирует переменную, которая хранит в себе число для вычисления его факториала. Далее нам нужно будет произвести вызов нашей функции fact с переменной number в качестве единственного аргумента и занести результат работы функции в новую переменную factor.

И затем преобразовать полученное значение обратно в строку и присвоить его второму текстовому полю.

Таким образом, наш простой обработчик событий будет выглядеть вот так:

Теперь можно скомпилировать и запустить готовую программу и проверить ее. Помните, что тип double в С++ может хранить число не превышающее !170.

Результат работы программы можно проверить в инженерном калькуляторе Windows.

Элементы управления

Элементы управления представляют собой визуальные классы, которые получают введенные пользователем данные и могут инициировать различные события. Все элементы управления наследуются от класса Control и поэтому имеют ряд общих свойств:

Anchor : Определяет, как элемент будет растягиваться

BackColor : Определяет фоновый цвет элемента

BackgroundImage : Определяет фоновое изображение элемента

ContextMenu : Контекстное меню, которое открывается при нажатии на элемент правой кнопкой мыши. Задается с помощью элемента ContextMenu

Cursor : Представляет, как будет отображаться курсор мыши при наведении на элемент

Dock : Задает расположение элемента на форме

Enabled : Определяет, будет ли доступен элемент для использования. Если это свойство имеет значение False, то элемент блокируется.

Font : Устанавливает шрифт текста для элемента

ForeColor : Определяет цвет шрифта

Location : Определяет координаты верхнего левого угла элемента управления

Name : Имя элемента управления

Size : Определяет размер элемента

Width : ширина элемента

Height : высота элемента

Читайте также:  Ворд не видит принтер windows 10 canon

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.

Элемент управления Button (Windows Forms) Button Control (Windows Forms)

Элемент управления Windows Forms Button позволяет пользователю щелкнуть его для выполнения действия. The Windows Forms Button control allows the user to click it to perform an action. На элементе управления Button могут отображаться текст и изображения. The Button control can display both text and images. При щелчке кнопки мышью элемент управления выглядит так, как будто его нажимают и отпускают. When the button is clicked, it looks as if it is being pushed in and released.

в этом разделе In This Section

Общие сведения об элементе управления Button Button Control Overview
Описание элемента управления, его основных возможностей и свойств. Explains what this control is and its key features and properties.

Практическое руководство. Обработка события нажатия кнопки в Windows Forms How to: Respond to Windows Forms Button Clicks
Описание основных приемов использования кнопки на форме Windows Forms. Explains the most basic use of a button on a Windows Form.

Практическое руководство. Назначение кнопок принятия в Windows Forms How to: Designate a Windows Forms Button as the Accept Button
Описывается, как назначить элемент управления Button в качестве кнопки «Принять», также известной как кнопка по умолчанию. Explains how to designate a Button control to be the accept button, also known as the default button.

Читайте также:  Windows 10 нет флажка

Практическое руководство. Назначение кнопок отмены в Windows Forms How to: Designate a Windows Forms Button as the Cancel Button
Описывается, как назначить элемент управления Button в качестве кнопки «Отмена», которая активируется при любом нажатии клавиши ESC. Explains how to designate a Button control to be the cancel button, which is clicked whenever the user presses the ESC key.

Справочник Reference

Класс Button Button class
Описание класса и всех его членов. Describes this class and has links to all its members.

Элементы управления для использования в формах Windows Forms Controls to Use on Windows Forms
Полный список элементов управления Windows Forms со ссылками на информацию об их применении. Provides a complete list of Windows Forms controls, with links to information on their use.

Динамическое создание кнопок и работа с ними C#

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

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

1 ответ 1

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

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

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

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

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

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

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

  • var button = (Button)sender; — Событие Click выдает нам объект sender , который содержит в себе всю информацию о том, кто послал данное событие. Мы знаем, что клик по кнопке производят объекты типа Button , значит смело можем привести sender к типу Button и записать это в переменную.
  • if (button != null) Тут мы проверяем, все ли у нас хорошо и не равна ли полученная нами кнопка Null . Кстати, в новых версиях C# языка все это можно очень грамотно упростить (а именно заменив «шапку» if и первую строку на if (sender is Button button) .
  • MessageBox.Show(«Прощай » + button.Name); — Ну, обычный вывод сообщения, нечего сверхъестественного. Единственное, подобную «компоновку» string можно очень просто сократить (опять же, новые версии языка, но знать думаю будет полезно), а именно «Прощай » + button.Name мы меняем на $»Прощай » .
  • button.Dispose(); — Здесь тоже довольно просто, говорим кнопке «пока!», а если быть точнее, то удаляем все занятые ей ресурсы (что приведет к ее удалению с формы).

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

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

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

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

Оцените статью