相关疑难解决方法(0)

为什么ControlCollection不会抛出InvalidOperationException?

按照这个问题Foreach循环处理控件跳过迭代它告诉我,迭代是允许通过更改集合:

例如,以下内容:

List<Control> items = new List<Control>
{
    new TextBox {Text = "A", Top = 10},
    new TextBox {Text = "B", Top = 20},
    new TextBox {Text = "C", Top = 30},
    new TextBox {Text = "D", Top = 40},
};

foreach (var item in items)
{
    items.Remove(item);
}
Run Code Online (Sandbox Code Playgroud)

InvalidOperationException:Collection已被修改; 枚举操作可能无法执行.

但是,在.Net表单中,您可以执行以下操作:

this.Controls.Add(new TextBox {Text = "A", Top = 10});
this.Controls.Add(new TextBox {Text = "B", Top = 30});
this.Controls.Add(new TextBox {Text = "C", Top = 50});
this.Controls.Add(new …
Run Code Online (Sandbox Code Playgroud)

.net c# foreach invalidoperationexception winforms

11
推荐指数
1
解决办法
217
查看次数

用于处理跳过迭代的控件的Foreach循环

创建文本框的代码......

private void btnAddIncrement_Click(object sender, EventArgs e)
{              
    SmartTextBox dynamictextbox = new SmartTextBox();

        dynamictextbox.BackColor = Color.Bisque;
        dynamictextbox.Width = this.tbWidth;
        dynamictextbox.Left = (sender as Button).Right + this.lastLeft;
    dynamictextbox.K = "Test";

    this.lastLeft = this.lastLeft + this.tbWidth;
    dynamictextbox.Top = btnAddStart.Top;
    this.Controls.Add(dynamictextbox);              
}
Run Code Online (Sandbox Code Playgroud)

用于删除所有文本框的代码.

foreach (Control c in this.Controls)
{

    if (c.GetType() == typeof(BnBCalculator.SmartTextBox))
    {
        count++;
        //MessageBox.Show((c as SmartTextBox).K.ToString());
        c.Dispose();
    }
   // else { MessageBox.Show("not txtbox"); }

}
Run Code Online (Sandbox Code Playgroud)

当我点击btnAddIncrement时,我按预期得到以下内容...... 在此输入图像描述

但是当我点击重置时,它会错过每一个文本框.见下文...

在此输入图像描述

不知道这里发生了什么,但无论我添加的文本框怎么样,这都是一样的.它总是错过每一个盒子.

c# winforms

6
推荐指数
1
解决办法
607
查看次数

标签 统计

c# ×2

winforms ×2

.net ×1

foreach ×1

invalidoperationexception ×1