我正在使用以下代码清除表单中的所有文本框。
protected static IEnumerable<Control> GetAllChildren(Control root)
{
var stack = new Stack<Control>();
stack.Push(root);
while (stack.Any())
{
var next = stack.Pop();
foreach (Control child in next.Controls)
stack.Push(child);
yield return next;
}
}
internal static void ResetTextBoxes(Control root, string resetWith = "", params TextBox[] except)
{
try
{
foreach (TextBox txt in GetAllChildren(root).OfType<TextBox>())
{
foreach (TextBox txtException in except)
{
if (txtException.Name != txt.Name)
{
txt.Text = resetWith == "" ? string.Empty : resetWith;
}
}
}
}
catch (Exception ex) { throw ex; }
}
我尝试将一些我不想使用params清除的特殊文本框分开,但它仍会清除所有框。需要帮助。
答案 0 :(得分:2)
GetAllChildren
的缩短版本:
protected static IEnumerable<Control> GetAllChildren(Control root) {
return new Control[] { root }
.Concat(root.Controls
.OfType<Control>()
.SelectMany(item => GetAllChildren(item)));
}
更短的Linq:
var source = GetAllChildren(root)
.OfType<TextBox>()
.Where(ctrl => !except.Contains(ctrl));
foreach (var textBox in source)
textBox.Text = resetWith;
当前实施的问题位于内部循环中:
foreach (TextBox txtException in except)
if (txtException.Name != txt.Name)
txt.Text = resetWith == "" ? string.Empty : resetWith;
如果您至少两个例外不同的名称
txtException.Name != txt.Name
将不可避免地满足(任何txt.Name
不等于第一个例外或第二个例外
答案 1 :(得分:0)
这种情况正在发生,因为您正在针对第二个集合的所有元素测试第一个集合的所有元素,因此即使.cd-side-nav { position: fixed; }
数组中存在文本框,它的名称也不会与其他文本框匹配。
请改用Linq的test = "AAATGG"
TestDict = {}
for index,i in enumerate(test[:-1]):
string = ""
if test[index] == test[index+1]:
string = i + test[index]
else:
break
print string
扩展方法:
except
答案 2 :(得分:0)
这是我使用的功能:
public void ClearAllFields(Control con)
{
foreach (Control c in con.Controls)
{
if (c is TextBox && c != null)
{
if (c.Name != "specialtxtbox1name" && c.Name != "specialtxtbox2name" && c.Name != "nameoftextbox") // just put in the name of special textBoxes between double quotes
c.Text = "";
}
else
{
ClearAllFields(c);
}
}
}
只需在任何需要的地方调用该功能
示例:
private void InsertDatathenClearForm_Click(object sender, EventArgs e)
{
//Code
//.
//.
File.Create(filepath);
MessageBox.Show("All Textboxes Data saved successfully");
//Clear fxn
ClearAllFields(this);
}
。
}