我在窗体上动态添加了一些自定义的控件,但是在移除时会出现提示:未处理的“System.NullReferenceException”类型的异常出现在 mytabcontrol.dll 中。
其他信息: 未将对象引用设置到对象的实例。代码如下:#region 删除按钮
/// <summary>
/// 删除按钮
/// </summary>
/// <param name="Num">删除按钮的数量</param>
private void DelButton(int Num)
{
  foreach(Control con in panel1.Controls)
    {
if(Convert.ToInt32(con.Name)>Num)panel1.Controls.Remove(con);
     }
}
#endregion控件的名称是一个字符型的数字。比如:初始载入时得到的数字是50。那么就要添加50个控件。5秒后得到的数字是30,就要在Panel1.Controls中去掉20个。(不考虑刷新的方法).希望达人帮忙谢谢~!~

解决方案 »

  1.   

    不能用foreach了,从后向前遍历
    private void Form1_Load(object sender, System.EventArgs e)
    {
    for (int i=1;i<=5;i++)
    {
    Button b=new Button();
    b.Name=i.ToString();
    this.panel1.Controls.Add(b);
    b.Width=50;
    b.Text=b.Name;
    b.Left=i*60;
    }
    } private void button1_Click(object sender, System.EventArgs e)
    {
    for (int i=this.panel1.Controls.Count-1;i>=0;i--)
    {
    if (Convert.ToInt32(this.panel1.Controls[i].Name)>3)
    {
    this.panel1.Controls[i].Dispose();
    }
    }

    }
      

  2.   

    楼上正解,由于你foreach里面,你却移除了控件,导致foreach语句遍历的控件是被你移去的控件。
      

  3.   

    foreach循环体中不能对所遍历的集合进行添加、删除等操作