我正在重置表单控件。
以编程方式查找NumericUpDown
Control的值后,它没有显示该值
它实际上会更改值,但控件上的文本仍为空白。
这是我的代码
public void ResetFields(Control.ControlCollection Controls)
{
foreach(Control control in Controls)
{
if (control is TextBox)
{
control.Text = string.Empty;
}
if (control is NumericUpDown)
{
NumericUpDown updown = control as NumericUpDown;
updown.Value = 3;
}
if (control.Controls.Count > 0)
{
this.ResetFields(control.Controls);
}
}
}
我已经得到了解决方案并将其作为答案发布。
答案 0 :(得分:1)
NumericUpDown
控件有Textbox
作为其子控件
因此,在更改NumericUpDown
控件的值之后,它还将在下一个循环中从中获取更多子控件,并通过检查(control is TextBox)
条件将文本重置为空。
public void ResetFields(Control.ControlCollection Controls)
{
foreach(Control control in Controls)
{
if (control is TextBox)
{
control.Text = string.Empty;
}
if (control is NumericUpDown)
{
NumericUpDown updown = control as NumericUpDown;
updown.Value = 3;
}
if (control.Controls.Count > 0)
{
this.ResetFields(control.Controls);
}
}
}
解决方案就是改变:
if (control.Controls.Count > 0 && !(control is NumericUpDown))
{
this.ResetFields(control.Controls);
}
答案 1 :(得分:1)
在最后两个if
语句中使用'else if'而不是显式检查NumericUpDown会更清晰:
public void ResetFields(Control.ControlCollection Controls)
{
foreach (Control control in Controls)
{
if (control is TextBox)
{
control.Text = string.Empty;
}
else if (control is NumericUpDown)
{
((NumericUpDown)control).Value = 3;
}
else if (control.Controls.Count > 0)
{
this.ResetFields(control.Controls);
}
}
}