【发布时间】:2016-12-02 11:09:12
【问题描述】:
我需要清除我的申请表。但是有 2 个控件我不想让它清除。
当我点击ComboBox 中的另一个选项时。它首先擦除所有控件,然后加载新控件。(或者至少这是我想要实现的目标。)
此代码循环遍历表单中的所有控件并检查控件名称是否不等于cmbType 或lblType。 (因为这样在清除所有控件时,这两个控件将保持不变。)
foreach (Control c in this.Controls)
{
if (c.Name != "cmbType" && c.Name != "lblType")
{
this.Controls.Remove(c);
c.Dispose();
}
}
但是这样有时当我单击ComboBox 中的不同选项时,它不会完全删除所有控件。它会留下一些不应该发生的控制。
【问题讨论】:
-
您执行此操作的方法不考虑面板或组框等控件中的子控件。
-
循环和循环源在反向中间工作。您正在从您定位的来源中减去。
-
@ThePerplexedOne 我们不使用任何面板。这只是一种形式。而不是在面板中。
-
使用
foreach (Control c in this.Controls.ToList()),解决@snnbm提到的问题 -
@snnbrn 我不太明白你的评论。能不能说的清楚一点?