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

C# won't allow me to add event handler to a button into a form class

这是一个 C# Web 表单项目,我在远离 IDE 编码很长时间后开始着手...

我正在尝试制作一个简单的自定义对话框 class。这是我的代码。

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

我的 objective 是每个按钮 btnSim 和 btnNao return 一个不同的值(比如 1 和 0)。

我做错了什么?

EventHandler 是 returns void 方法的委托。 你的方法 return 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;
    }