我在Windform动态添加了一组RadioButton,代码如下:
radioBtnF[i] = new RadioButton();
radioBtnF[i].Name = "radioBtnC" + i.ToString();
flowLayoutPanel1.Controls.Add(radioBtnF[i]);
radioBtnF[i].CheckedChanged += new System.EventHandler(radioBtnC_CheckedChanged);在运行程序时,单击RadioButton后,radioBtnC_CheckedChanged 里的代码正确的执行了,但VS2005的输出窗口里总会报:
在 System.InvalidOperationException 中第一次偶然出现的“System.Windows.Forms.dll”类型的异常虽然并没有影响程序的运行,但我想请问这是为什么啊?对程序有什么不良影响吗?是否可以改正?谢谢!

解决方案 »

  1.   

    看上面的代码,控件添加的过程是不会出错的。
    建议楼主先把radioBtnC_CheckedChanged()这个方法里面的代码全部注释掉,看还有没有这个异常。
      

  2.   

    System.Windows.Forms.dll中某个try...catch结构中的throw了个InvalidOperationException,但是被catch了
    只是碰巧是第一次throw这种Exception,所以记录了下来
    总之,不需要关心
      

  3.   

    发现了,在radioBtnC_CheckedChanged里,有一句
    comboBox1.DataSource = ds.Tables["class1"]; 
    是它引起的异常,但我定义的comboBox1_SelectedValueChanged 这个事件并没有运行啊。
    请问这是为什么啊?
      

  4.   

    radioBtnF[i].CheckedChanged += new System.EventHandler(radioBtnC_CheckedChanged); 
    在初始化是否重復?
      

  5.   

    添加控件的语句如下:
    for (int i = 0; i < ds.Tables["level2"].Rows.Count; i++)
    {
    // 
    // 添加  radioBtnC
    // 
    radioBtnF[i] = new RadioButton();
    radioBtnF[i].AutoSize = true;
    //radioBtnF[i].Location = new System.Drawing.Point(3, 3);
    radioBtnF[i].Name = "radioBtnC" + i.ToString();
    radioBtnF[i].Size = new System.Drawing.Size(95, 16);
    radioBtnF[i].TabIndex = 0;
    radioBtnF[i].TabStop = true;
    radioBtnF[i].Text = ds.Tables["level2"].Rows[i]["typename"].ToString();
    radioBtnF[i].Tag = ds.Tables["level2"].Rows[i]["typeid"].ToString();
    radioBtnF[i].UseVisualStyleBackColor = true;
    flowLayoutPanel1.Controls.Add(radioBtnF[i]);
    radioBtnF[i].CheckedChanged += new System.EventHandler(radioBtnC_CheckedChanged);
    }我设计的是这些RadioButton的CheckedChanged都交由radioBtnC_CheckedChanged(object sender, EventArgs e) 处理。
      

  6.   

    我又试了下,如果把
    comboBox1.DataSource = ds.Tables["class1"];  注释,加上一句
    comboBox1.Items.Add("dsfsdf"); 那么,comboBox1_SelectedValueChanged(object sender, EventArgs e)会被触发,而且也没有报异常。ds.Tables["class1"]是从如下代码中来的。
    if (ds.Tables.Contains("class1"))
      ds.Tables.Remove("class1");Orada.SelectCommand.CommandText = "Select * from type where parentid=" + Convert.ToInt16(radioBtn.Tag);
    Orada.Fill(ds, "class1");
      

  7.   


    不是只有第一次,每次按那些动态添加的RadioButton时,都会报这个异常。
      

  8.   

    有几个地方可以再确认一下1. 每次单击RadioButton,radioBtnC_CheckedChanged()这个函数是会被调两次的,分别是上一个Uncheck,和当前这个Check. 楼主是否对这个做了判断?2. 把 comboBox1.DataSource = ds.Tables["class1"]; 这句换另一个地方执行一下,看是否仍然失败。如果仍然失败,则应该和RadioButton没多大关系,如果成功了,考虑哪个RadioButton选中是否对这句话有影响。3. 楼主可以分别执行一下 取下标ds.Tables["class1"]和对comboBox1.DataSource赋值,看是哪个失败。
      

  9.   

    <span class="adminOpera"> ss </span>
      

  10.   

    1,确实调用了两次,但里面的代码只执行了一次(应该是第二次调用时执行的。)。
    2,并没有执行失败,只是在VS05的输出窗口里出了个异常,并没有影响运行。
    3, 取ds.Tables["class1"]没问题,
    对comboBox1.DataSource赋值也没问题,但会出那个异常。
      

  11.   

    根据测试结果,显然是对DataSource的赋值引发的异常。
    如果继续调查异常原因,我觉得可以再尝试下面几个测试:
    1. 另外再new一个comBox2, 把ds.Tables["class1"]赋给comboBox2.DataSource,看是否还有异常;
    2. 另外创建一个Table,赋给comboBox1.DataSource,看是否还有异常;
    就能知道是ComBox的问题还是Tables的问题。
    我估计是ComBox. 关于DataSource的详细用法,不是很清楚,楼主可以仔细查查看。
      

  12.   

    真是奇了!我又画了两个ComBox,同样的代码,竟然什么事都没了.....奇怪!
      

  13.   

    估计还是ComBox出了问题,呵呵。
    比比新添加的这个ComBox和原来那个有什么不同。
    没事了就好。不过还是想知道真正的原因。
      

  14.   

    我说句题外话,楼主要添加一组RadioButton控件为什么不用RadioButtonList,我这是提醒一下或许你有不用这个空间的原因吧
      

  15.   


    一开始是不知道,看了你的回复,回去找了一下,好象只有Web应用程序下才有吧?我这个是Windows下的。