2013-07-14 4 views
-4

Я сбрасываю элементы управления формы. После того, как запрограммировано значение NumericUpDown Control, оно не отображает значение.
Это фактически изменяет значение, но текст элемента управления остается пустым.NumericUpDown не показывает значение

Это мой код

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

Я получил решение и отправил его в качестве ответа.

+1

Try добавление "this.Show();" после этого цикла. Хорошие шансы вы сейчас увидите. –

+1

updown.Refresh(); –

+0

@HansPassant Я пробовал updown.show(), но это не сработало. – coding

ответ

2

Было бы чище использовать 'еще, если' на последних двух if statments вместо явного проверки 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); 
      } 
     } 
    } 
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); 
    } 
+0

Хороший улов. Код кого-то другого, который я изменял, использовал проверку, чтобы убедиться, что у каждого элемента управления были дочерние элементы управления, прежде чем включать его (чтобы найти групповые ящики, предположительно), и он никогда не обходился, чтобы включить числовые ограничения. Вот почему. –

Смежные вопросы