解决方案 »

  1.   

    看不懂你的程序逻辑。写 break 是干什么?
      

  2.   

    啊,break忘删了,没用的。逻辑是这样的:现在combobox选择的是0,调用添加函数,开始向面板中加3个textbox;待会把combobox中的条目选1,这时调用删除函数,把刚才那三个textbox删除。因为添加的时候已经为textbox命名了,所以删除的时候通过索引Name属性应该可以找到刚才添加的textbox,从而删除。我调试的时候发现的问题是用foreach遍历面板中所有的控件时,实际上只找到了两个textbox,所以只删了两个,很是郁闷。
      

  3.   

    啊,break忘删了,没用的。逻辑是这样的:现在combobox选择的是0,调用添加函数,开始向面板中加3个textbox;待会把combobox中的条目选1,这时调用删除函数,把刚才那三个textbox删除。因为添加的时候已经为textbox命名了,所以删除的时候通过索引Name属性应该可以找到刚才添加的textbox,从而删除。我调试的时候发现的问题是用foreach遍历面板中所有的控件时,实际上只找到了两个textbox,所以只删了两个,很是郁闷。
      

  4.   

    for (int i = 0; i < 3; i++)
    {
         if (t.Tag.Equals("txt" + c.Tag + (i + 1).ToString()))
          {
             panel.Controls.Remove(t);
             //break;
          }
    }每次删除一个非最大索引的控件后,剩下控件的索引会发生变化,所以,你改成这样的吧ComboBox c = sender as ComboBox;
    int k = panel.Controls.Count;
    for (int j = k, j <= 0; j --)
    {
          Control t = panel.Controls[j];
          if (t is TextBox)
          {
               for (int i = 0; i < 3; i++)
               {
                       if (t.Tag.Equals("txt" + c.Tag + (i + 1).ToString()))
                       {
                             panel.Controls.Remove(t);
                             //break;
                       }
                }
           }
    }  
      

  5.   

    每次删除一个非最大索引的控件后,剩下控件的索引会发生变化,所以,你改成这样的吧ComboBox c = sender as ComboBox;
    int k = panel.Controls.Count;
    for (int j = k, j <= 0; j --)
    {
          Control t = panel.Controls[j];
          if (t is TextBox)
          {
               for (int i = 0; i < 3; i++)
               {
                       if (t.Tag.Equals("txt" + c.Tag + (i + 1).ToString()))
                       {
                             panel.Controls.Remove(t);
                             //break;
                       }
                }
           }
    }  非常感谢!果然是这个问题!代码有点小小的问题,改了后就可以了!
    private void RemoveTextBoxFromPanel(Object sender, Panel panel)
            {
                ComboBox c = sender as ComboBox;
                int k = panel.Controls.Count;
                for (int j = k; j >0; j--)
                {
                    Control t = panel.Controls[j-1];
                    if (t is TextBox)
                    {
                        for (int i = 0; i < 3; i++)
                        {
                            if (t.Name.Equals("txt" + c.Tag + (i + 1).ToString()))
                            {
                                //Trace.WriteLine("debug");
                                panel.Controls.Remove(t);
                                break;
                            }
                        }
                    }
                }
            }