Как перенести переменную вместе с нажатием кнопки?

#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. Спасибо. Я действительно доволен)