【发布时间】:2013-09-18 06:44:44
【问题描述】:
如何通过foreach更改winform中文本框的所有边框样式
或者更短的内容,然后列出每个文本框并更改它们。
【问题讨论】:
如何通过foreach更改winform中文本框的所有边框样式
或者更短的内容,然后列出每个文本框并更改它们。
【问题讨论】:
您可以遍历表单的控件:
foreach(Control c in myForm.Controls)
{
if(c is TextBox)
{
((TextBox)c).BorderStyle = yourStyle;
}
}
编辑
如果您有一些可以包含文本框的容器(例如面板、tabControls、ecc..),您可以递归迭代:
private void checkControl(Control control)
{
foreach (Control c in control.Controls)
{
var textBox = c as TextBox;
if (textBox != null)
textBox.BorderStyle = BorderStyle.FixedSingle;
else
checkControl(c);
}
}
并最初调用该方法:
checkControl(this);
【讨论】:
is,代码有点不清楚。另一件事是您可能有某些TextBox'es,您不想触摸。然后你可以使用Tag 来mark 一些东西。事实上,使用Tag 你甚至不需要检查它是不是TextBox。
is 的使用我认为这在性能方面是一个很好的做法(有关更多信息,请参阅this)。您对标签的看法是正确的,但我不知道 OP 的意图。
private void SetTextBoxBorderStyle(Control ctrl)
{
foreach(Control c in ctrl.Controls)
{
if(c is TextBox)
(c as TextBox).BorderStyle = yourStyle;
else
SetTextBoxBorderStyle(c);
}
}
像这样在你的表单中调用它:
SetTextBoxBorderStyle(this);
【讨论】:
public void setAllTextBoxs(Control control)
{
foreach (Control c in control.Controls)
if (c is TextBox)
(c as TextBox).BorderStyle = BorderStyle.FixedSingle;
else if(c.HasChildren)
setAllTextBoxs(c);
}
Lambda 等效...老忠实的一班轮 XD
public void setAllTextBoxs(Control control)
{
control.Controls.Cast<Control>().ToList().ForEach(c => { if (c is TextBox) (c as TextBox).BorderStyle = BorderStyle.FixedSingle; else if (c.HasChildren) setAllTextBoxs(c); });
}
然后这样称呼它:
setAllTextBoxs(this);
【讨论】: