Как в программу добавить кнопку

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

arr[i].Click += new EventHandler(button_1); //arr это массив кнопок
заместо button_1 нужно сделать например button_2,button_3 и т.д. кнопок очень много.
Отслеживать
Hector djan
задан 9 мар 2018 в 21:27
Hector djan Hector djan
60 1 1 золотой знак 1 1 серебряный знак 9 9 бронзовых знаков

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

9 мар 2018 в 21:55

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

Excel Элементы управления формы Кнопки

9 мар 2018 в 22:08
– user176262
9 мар 2018 в 22:32

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

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

int top = 10; int left = 10; for (int i = 0; i

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

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

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

int top = 10; int left = 10; for (int i = 0; i

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

private void ButtonOnClick(object sender, EventArgs eventArgs)

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

var button = (Button)sender; if (button != null)

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

  • 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(); — Здесь тоже довольно просто, говорим кнопке «пока!», а если быть точнее, то удаляем все занятые ей ресурсы (что приведет к ее удалению с формы).
Читайте также:
В какой программе сделать плакат формата а3

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

Верстка кнопки (HTML, CSS)

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

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

private Button ClickedButton;

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

if (sender is Button button) < if (ClickedButton != null) < if (ClickedButton.Name == button.Name) < button.Dispose(); >> ClickedButton = button; >

  • if (sender is Button button) — об этом я уже писал выше (приводим sender к типу Button и если он не Null , то выполняем код внутри.
  • if (ClickedButton != null) — Проверяем, что бы наша «сохраненная» кнопка, не была пустой.
  • if (ClickedButton.Name == button.Name) — Условие, которое проверяет имена на соответствен. Если они совпадают, то выполняем код внутри.
  • .Dispose(); — Тут тоже все ясно, удаляем объект.
  • ClickedButton = button; — После всех операций, сохраняем нашу кнопку в заранее созданную переменную, для будущего использования.

Источник: ru.stackoverflow.com

Учебник. Добавление элементов управления в средство просмотра изображений приложения Windows Forms в Visual Studio

Область применения:yesVisual StudionoVisual Studio для Mac noVisual Studio Code

В этой серии из трех руководств вы создадите приложение Windows Forms, которое загружает изображение и отображает его. В интегрированной среде разработки Visual Studio имеются средства, необходимые для создания приложения. Подробнее см. в статье Добро пожаловать в интегрированную среду разработки Visual Studio.

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

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

  • Добавление элементов управления в приложение
  • Добавление кнопок на панель макета
  • Изменение имен и расположений элементов управления
  • Добавление компонентов диалоговых окон

Предварительные требования

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

Добавление элементов управления в приложение

Приложение «Средство просмотра изображений» использует элемент управления PictureBox для вывода изображения. Оно использует флажок и несколько кнопок для управления изображением и фоном, а также для закрытия приложения. Вы добавите элемент PictureBox и флажок из области панели элементов в Visual Studio IDE.

  1. Запустите Visual Studio. Проект средства просмотра изображений находится в разделе Открыть последние.
  2. В конструкторе Windows Forms выберите элемент управления TableLayoutPanel, добавленный в предыдущем учебнике. Убедитесь, что в окне Свойства отображается tableLayoutPanel1.
  3. В левой части интегрированной среды разработки Visual Studio выберите вкладку Панель элементов. Если вы ее не видите, выберите пункт Представление>Панель элементов в строке меню или воспользуйтесь комбинацией клавиш CTRL+ALT+X. На панели элементов разверните узел Общие элементы управления.
  4. Дважды щелкните элемент PictureBox, чтобы добавить в форму элемент управления PictureBox. Visual Studio IDE добавит элемент управления PictureBox в первую пустую ячейку TableLayoutPanel.
  5. Щелкните новый элемент управления PictureBox, чтобы выбрать его, а затем щелкните черный треугольник на новом элементе управления PictureBox, чтобы отобразить его список задач. Снимок экрана: диалоговое окно задачи PictureBox с выделенным пунктом
  6. Выберите Закрепить в родительском контейнере, который задает для свойства Dock элемента управления PictureBox значение Fill. Это значение отображается в окне Свойства.
  7. В окне Свойства для элемента управления PictureBox задайте для свойства ColumnSpan значение 2. Теперь элемент управления PictureBox заполняет оба столбца.
  8. Установите для его свойства BorderStyle значение Fixed3D.
  9. В конструкторе Windows Forms выберите элемент управления TableLayoutPanel. Затем двойным щелчком выберите элемент CheckBox на панели элементов, чтобы добавить новый элемент управления CheckBox в следующую свободную ячейку таблицы. Элемент управления PictureBox занимает первые две ячейки в TableLayoutPanel, поэтому элемент управления CheckBox добавляется в нижнюю левую ячейку.
  10. Выберите свойство Text и введите Stretch. Снимок экрана: элемент управления CheckBox с именем
Читайте также:
Как запустить одну программу из другой

Добавление кнопок на панель макета

Компонент Button (кнопка). Взаимодействие компонент Label и Button . Событие MouseMove

Перед изучением данной темы рекомендуется ознакомиться с предыдущей темой:

Поиск на других ресурсах:

1. Общие сведения о компоненте Button

Компонент Button представляет кнопку на форме (рисунок 1).

C#. Windows Forms. Компонент Button. Размещение на панели Toolbox

Рисунок 1. Компонент Button . Размещение на панели Toolbox

Компонент Button является классом, унаследованным от абстрактного класса ButtonCase и реализующим интерфейс IButtonControl . В свою очередь, класс ButtonCase унаследован от класса Control .

Во множестве классов .NET Framework существует 3 типа кнопок, унаследованных от ButtonCase : Button , CheckBox , RadioButton .

Класс (компонент) Button имеет набор свойств, доступных как программно, так и в режиме проектирования (рисунок 2).

C#. Windows Forms. Свойства компонента Button

Рисунок 2. Свойства компонента Button

Ниже приведены основные свойства компонента Button .

2. Свойства компонента Button

Основные свойства элемента управления Button даны ниже. Здесь приведены базовые свойства, отличающиеся от свойств компонента Label . Более подробно о компоненте Label (метка) можно прочитать здесь .

// Объявить экземпляр типа форма Form2 f2 = new Form2(); // Если результат возврата из формы OK, то выполнить какие то действия if (f2.ShowDialog() == DialogResult.OK) < // действия, которые нужно выполнить если нажата кнопка OK // . >

3. События элемента управления Button

Следующая таблица отображает главные действия элемента управления типа Button .

Событие Описание
Click Клик на кнопке
MouseClick Клик на кнопке с получением более подробной информации с помощью класса MouseEventArgs
Enter Возникает, когда кнопка получает фокус ввода
Leave Возникает, когда элемент управления (кнопка) теряет активность (фокус) на форме
KeyDown Появляется, когда нажата клавиша (в том числе и клавиши Alt и Ctrl). Позволяет получить код нажатой клавиши, описываемый в перечислении Keys .
KeyPress Возникает, когда элемент управления имеет фокус и нажата и отпущена клавиша. Позволяет получить код символа типа char.
KeyUp Возникает когда отпущена клавиша. Также, как и для события KeyDown , позволяет получить код нажатой клавиши, описанный в перечислении Keys
PreviewKeyDown Возникает перед событием KeyDown в момент когда нажата клавиша и фокус ввода находится над кнопкой
MouseDown Возникает, когда указатель мыши находится над компонентом, и кнопка мыши нажата
MouseEnter Возникает, когда мышка входит в видимую часть элемента управления
MouseHover Возникает, когда мышка остается внутри элемента управления некоторое время
MouseLeave Возникает, когда мышка оставляет видимую часть элемента управления
MouseMove Возникает, когда курсор мыши двигается над областью кнопки
MouseUp Возникает, когда указатель мыши находится над компонентом и кнопка мыши отпущена
4. Пример использования компонентов Label и Button . Программирование события MouseMove
4.1. Условие задачи

Разработать проект, содержащий 2 кнопки ( Button ) и 2 метки ( Label ). Исследовать работу компонента выполнив следующие пункты.

Читайте также:
Программа что бы не глючил Андроид
4.2. Выполнение
4.2.1. Создание проекта

Средствами Microsoft Visual Studio создать проект. Пример создания проекта типа «C# — Windows Forms» можно посмотреть здесь .

Назвать проект «Demo Program» . Для этого можно использовать свойство Text основной формы Form1 .

4.2.2. Размещение элементов управления Label , Button . Настройка элементов управления

Разместить на форме два элемента управления типа Label и два элемента управления типа Button . В результате система создаст четыре экземпляра с именами label1 , label2 , button1 , button2 (рисунок 3).

C#. Windows Forms. Класс Form. Начальное состояние формы и элементов управления на форме

Рисунок 3. Начальное состояние формы и элементов управления на форме

Настроить следующие свойства элементов управления формы:

  • label1.Text = «Form Size = « (свойство Text элемента управления label1 );
  • label2.Text = «Catch me!» ;
  • button1.Text = «Form Size» ;
  • button2.Text = «Hide/Show» .

После корректировки размеров некоторых элементов управления и настройки форма будет выглядеть как показано на рисунке 4.

C#. Windows Forms. Урок. Компонент Button. Вид формы после настройки элементов управления

Рисунок 4. Вид формы после настройки элементов управления

4.2.3. Программирование события Click компонента button1 . Вывести размеры формы

На этом этапе необходимо запрограммировать обработчик события Click компонента button1 . Более подробно об особенностях программирования события в Microsoft Visual Studio можно посмотреть здесь .

Текст обработчика события button1_Click() следующий:

private void button1_Click(object sender, EventArgs e) < // Обработчик события клика на кнопке button1. // Вывести размеры формы, использоват свойства Width, Height. label1.Text = String.Format(«Form Size: W = , H = «, this.Width, this.Height); >

Как видно из вышеприведенного кода, по нажатию кнопки button1 в компоненте label1 выводится информация о текущих размерах формы. Если при выполнении программы попытаться изменить размеры формы и нажать кнопку button1 , новые размеры снова отобразятся в label1 .

4.2.4. Программирование события Click компонента button2 . Показать или скрыть компоненты формы

При нажатии на кнопку button2 ( «Show/Hide» ) должны быть скрытыми или отображенными компоненты label1 , label2 , button2 . Согласно этому, в обработчике события Click компонента button2 необходимо ввести следующий текст

private void button2_Click(object sender, EventArgs e) < // Скрыть/Показать все — свойство Visible button1.Visible = !button1.Visible; label1.Visible = !label1.Visible; label2.Visible = !label2.Visible; if (button1.Visible) button2.Text = «Hide»; else button2.Text = «Show»; >

4.2.5. Программирование обработчика события MouseMove компонента label2

Событие MouseMove любого элемента управления возникает, когда мышка двигается над прямоугольной областью этого элемента управления. Компонент типа Label также может программировать это событие.

В обработчике события label2_MouseMove() вводится следующий код

private void label2_MouseMove(object sender, MouseEventArgs e) < // Событие MouseMove для компонента label2 означает, что // нужно сдвинуть метку // 1. Попытка размещения области label2 label2.Left = label2.Left + 10; label2.Top = label2.Top — 10; // 2. Проверка, вышла ли метка за пределы формы по координате X if ((label2.Left < -20) || (label2.Left >this.Width — 20)) < // Если метка вышла за пределы формы по координате x, // то изменить горизонтальную позицию label2 label2.Left = 10; > // 3. Проверка, вышла ли метка за пределы формы по координате Y if ((label2.Top < -10) || (label2.Top >this.Height — 10)) < // Если метка за пределами формы по координате Y, // то изменить вертикальную позицию label2 label2.Top = 80; > >

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

Связанные темы

  • Создание пятиугольной формы
  • Пример разработки унаследованной формы
  • Компонент Label . Программное создание элемента управления Label . Класс MessageBox . Перечисление DialogResult

Источник: www.bestprog.net

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru