我正在使用此代码:
foreach (Control c in this.Controls)
{
Button btn = c as Button;
{
if (c == null)
continue;
c.Click += handle_click;
}
void handle_click(object sender, EventArgs e)
{
Form1 ss = new Form1();
ss.label1.Text = (sender as Button).Text;
ss.ShowDialog();
}
但代码会影响我的所有Form元素。示例我的所有按钮。如何为一个按钮创建例外?我通过创建一个面板并将我的按钮放在里面来管理它,但是当我点击面板时,我收到以下错误消息:
" NullReferenceExeption未处理" "对象引用未设置为对象的实例"
为什么会这样?
答案 0 :(得分:4)
一个问题在这里:
Button btn = c as Button;
{
if (c == null) <-- should be if(btn == null)
continue;
因此,您要将事件处理程序分配给每个控件,而不仅仅是按钮。然后,当您尝试将发件人转发到事件处理程序中的Button
时,您将获得一个空值。
您还可以在事件处理程序中支持事件处理:
void handle_click(object sender, EventArgs e)
{
var button = (sender as Button);
if(button == null)
{
//throw an exception? Show an error message? Ignore silently?
}
Form1 ss = new Form1();
ss.label1.Text = button.Text;
ss.ShowDialog();
}