Короче, суть в чем, я создаю кнопки на динамической форме и хочу чтобы у каждой кнопки было све нажатие или что-нибудь такое, по которому я смогу проверить какая кнопка была нажата и сохранить его, после нажатия другой уже кнопки сравнить их текст если они будут совпадать то обе кнопки убрать с формы.
я делаю так,
arr[i].Click += new EventHandler(button_1); //arr это массив кнопок
заместо button_1 нужно сделать например button_2,button_3 и т.д. кнопок очень много.
К примеру у нас есть такой код, который добавляет на нашу форму 10 кнопок:
int top = 10;
int left = 10;
for (int i = 0; i < 10; i++)
{
Button button = new Button();
button.Left = left;
button.Top = top;
this.Controls.Add(button);
top += button.Height + 2;
}
Как мы можем узнать кнопку? Для этого нужен какой либо идентификатор, возьмем к примеру имя, пусть оно будет btn{порядковый номер}. Добавим после строки button.Top = top; еще одну строку button.Name = "btn" + i;.
Далее, как нам отследить нажатие? Для этого нужно подписаться на событие. Стандартный вариант - Click - событие, которое происходит при клике мышью по объекту. Для всех наших кнопок достаточно всего одного обработчика событий! Давайте добавим еще одну строку в свойство кнопки - button.Click += ButtonOnClick;.
Хорошо, с генерацией покончили, теперь наш код выглядит так:
int top = 10;
int left = 10;
for (int i = 0; i < 10; i++)
{
Button button = new Button();
button.Left = left;
button.Top = top;
button.Name = "btn" + i;
button.Click += ButtonOnClick;
this.Controls.Add(button);
top += button.Height + 2;
}
Но! Мы не добавили то, что будет выполнятся при нажатие на кнопку, давайте напишем:
private void ButtonOnClick(object sender, EventArgs eventArgs)
{
}
Хорошо, ошибок нет, должно все работать. Но, нужно ведь наделить каким то функционалом наши кнопки... Давайте в ButtonOnClick добавим определение нажатой кнопки и ее удаление:
var button = (Button)sender;
if (button != null)
{
MessageBox.Show("Прощай " + button.Name);
button.Dispose();
}
Давайте по порядку:
Click выдает нам объект sender, который содержит в себе всю информацию о том, кто послал данное событие. Мы знаем, что клик по кнопке производят объекты типа Button, значит смело можем привести sender к типу Button и записать это в переменную.if (button != null) Тут мы проверяем, все ли у нас хорошо и не равна ли полученная нами кнопка Null. Кстати, в новых версиях C# языка все это можно очень грамотно упростить (а именно заменив "шапку" if и первую строку на if (sender is Button button).MessageBox.Show("Прощай " + button.Name); - Ну, обычный вывод сообщения, нечего сверхъестественного. Единственное, подобную "компоновку" string можно очень просто сократить (опять же, новые версии языка, но знать думаю будет полезно), а именно "Прощай " + button.Name мы меняем на $"Прощай {button.Name}".button.Dispose(); - Здесь тоже довольно просто, говорим кнопке "пока!", а если быть точнее, то удаляем все занятые ей ресурсы (что приведет к ее удалению с формы).Чтож, вроде все разложил "по полочкам" как мог, с этой частью думаю трудностей не возникнет. Удачи!
как мне определить не ту кнопку которую сейчас нажали, а ту, которая была нажата до нее.
Создадим где нибудь приватный объект 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; - После всех операций, сохраняем нашу кнопку в заранее созданную переменную, для будущего использования.Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости