#c# #winforms
#c# #winforms
Вопрос:
Я не знаю названия кнопки, которую я передаю.
Для дальнейшей работы с данными мне нужно передать хотя бы идентификатор.
Но когда я пытаюсь отправить что-то еще вместе с событием, появляется ошибка.
У меня есть база данных Sqlite
for (int i = 0; i < database.Rows.Count; i1 )
{
Button buttonNew = new Button();
int id = Convert.ToInt32(row["id"]); //i get id elem of my database
buttonNew.Click = ButtonNewClick(id);
}
void ButtonNewClick(int id)
{
Form2 fNext = new Form2();
fNext.Show();
//Other operations...
}
Возможно, я делаю что-то не так…
Можете ли вы мне помочь?
Комментарии:
1. Что означает «передать кнопку»?
2. @NatPongjardenlarp — Нужно получить идентификатор кнопки (
3. Хм, все эти кнопки выходят из области видимости, когда начинается следующая итерация цикла, и я не вижу кода, добавляющего кнопку в какую-либо форму или другой элемент управления. Поэтому я сомневаюсь, что кто-либо когда-либо нажимал на что-либо из этого… В любом случае, вы можете взглянуть на
Tag
как на быстрое решение для сохранения идентификатора. Или создайте свой собственный пользовательский класс button со свойством для идентификатора.4. @sticky bit — Большое спасибо.
Ответ №1:
Сохраните идентификатор в свойстве TAG вашей динамической кнопки, затем вы можете получить его позже, приведя «отправитель» к кнопке в событии click:
private void Foo()
{
for (int i = 0; i < database.Rows.Count; i1 )
{
Button buttonNew = new Button();
int id = Convert.ToInt32(row["id"]); //i get id elem of my database
buttonNew.Tag = id; // store the ID for later retrieval
buttonNew.Click = ButtonNew_Click;
// ... add "buttonNew" to something ...
}
}
private void ButtonNew_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
int id = (int)btn.Tag;
// ... do something with "id" ...
}
Обратите внимание, что ПОДПИСЬ обработчика щелчка изменилась.
Комментарии:
1. Спасибо. Я действительно доволен)