NumericUpDown没有显示值

时间:2013-07-14 19:23:52

标签: c#

我正在重置表单控件。 以编程方式查找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);
   }
}
}

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

2 个答案:

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