C#won';我不允许将事件处理程序添加到表单类的按钮中

C#won';我不允许将事件处理程序添加到表单类的按钮中,c#,event-handling,C#,Event Handling,这是一个C#web表单项目,我在远离IDE编码很长一段时间后开始使用它 我正在尝试创建一个简单的自定义对话框类。这是我的密码 public static class Dialogo { public static int show () { Form dialogo = new Form(); dialogo.Width = 300; dialogo.Height = 300;

这是一个C#web表单项目,我在远离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\u Click

问题是我试图在代码中添加以下内容,但它不允许我将其放在任何地方(它总是说这是错误的):

我的目标是让两个按钮btnSim和btnNao都返回不同的值(比如1和0)


我做错了什么?

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;
    }

看起来您需要执行
btnSim.click+=
,然后该方法必须返回void而不是int.
dialogo.ShowDialog()
是模态的,因此它下面的代码在窗体关闭之前不会运行,这意味着在窗体显示时您的事件处理程序没有订阅。此外,事件不会返回值。
 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;
    }