C#won';我不允许将事件处理程序添加到表单类的按钮中
这是一个C#web表单项目,我在远离IDE编码很长一段时间后开始使用它 我正在尝试创建一个简单的自定义对话框类。这是我的密码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;
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;
}