C# не позволит мне добавить обработчик события для кнопки в классе формы - PullRequest
1 голос
/ 31 марта 2020

Это проект C# веб-формы, с которого я начинаю после долгого перерыва в программировании IDE ...

Я пытаюсь создать простой класс пользовательских диалоговых окон. Это мой код.

public static class Dialogo
{
        public static int show ()
        {
            Form dialogo = new Form();

            dialogo.Width = 300;
            dialogo.Height = 300;

            Button btnSim = new Button() { Text = "Sim", Left = 30, Width = 100 };
            Button btnNao = new Button() { Text = "Não", Left = 150, Width = 100 };

            dialogo.Controls.Add(btnSim);
            dialogo.Controls.Add(btnNao);
            dialogo.ShowDialog();

            // the following two lines are the problematic ones
            btnSim += new EventHandler(btnSim_Click);
            btnNao += new EventHandler(btnNao_Click);

            return -1;
        }
}

Он подчеркивает текст в круглых скобках, и сообщение говорит:

Имя btnSim_Click 'не существует в текущем контексте

Проблема в том, что я пытался добавить в свой код следующее, но это не позволяет мне никуда его помещать (всегда говорится, что что-то не так):

private int btnNao_Click (object sender, EventArgs e)
{
    return 0;
}

private int btnSim_Click (object sender, EventArgs e)
{
    return 1;
}

Моя цель заключается в том, чтобы каждая из кнопок btnSim и btnNao возвращает различное значение (скажем, 1 и 0).

Что я делаю не так?

1 Ответ

2 голосов
/ 31 марта 2020

EventHandler является делегатом для метода, который возвращает void. Ваши методы возвращают int.

Попробуйте что-то вроде этого:

 public static int show()
    {
        int returnValue = -1;

        using (Form dialogo = new Form())
        {
            dialogo.Width = 300;
            dialogo.Height = 300;

            Button btnSim = new Button() { Text = "Sim", Left = 30, Width = 100 };
            Button btnNao = new Button() { Text = "Não", Left = 150, Width = 100 };

            dialogo.Controls.Add(btnSim);
            dialogo.Controls.Add(btnNao);

            btnSim.Click += (s, e) => { returnValue = 0; dialogo.DialogResult = DialogResult.OK; };
            btnNao.Click += (s, e) => { returnValue = 1; dialogo.DialogResult = DialogResult.OK; };
            dialogo.Disposed += (s, e) =>
            {
                btnSim?.Dispose();
                btnSim = null;

                btnNao?.Dispose();
                btnNao = null;
            };

            dialogo.ShowDialog();
        }

        return returnValue;
    }
...