NumericUpDown未显示值

本文关键字:显示 NumericUpDown | 更新日期: 2023-09-27 18:22:21

我正在重置表单控件。用程序更改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);
   }
}
}

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

NumericUpDown未显示值

在最后两个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);
            }
        }
    }

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