-3

我正在重置我的表单控件。以编程方式更改NumericUpDownControl 的值后,它没有显示该值。
它实际上更改了值,但控件上的文本保持空白。

这是我的代码

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);
   }
}
}

我得到了解决方案并将其发布为答案。

4

2 回答 2

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);
   }
于 2013-07-14T20:02:46.787 回答
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);
            }
        }
    }
于 2013-07-14T20:35:27.790 回答