Как вызвать повторное отображение ящиков UpDown? - PullRequest
3 голосов
/ 12 ноября 2009

Как я могу вызвать повторное отображение значения поля UpDown?

У меня есть приложение с несколькими полями UpDown для установки значений файла конфигурации перед загрузкой файла на встроенное устройство. Я могу загрузить конфигурацию с устройства и отобразить значения в соответствующих полях UpDown.

Однако, если я удаляю содержимое поля UpDown, а затем обновляю его значение, значение окна обновления не перерисовывается, пока я не увеличу или уменьшу значение с помощью встроенных кнопок.

Шаги для воспроизведения:

  1. Запустите приложение.
  2. Удалить значение из поля UpDown, чтобы оно ничего не отображало
  3. Измените значение UpDownBox. Значение по-прежнему не отображается.
  4. Увеличивать или уменьшать значение поля UpDown с помощью кнопок, отображается правильно измененное значение.

Я пробовал следующее без изменений .:

            fenceNumberUpDown.Value = config.getFenceNumber();
            fenceNumberUpDown.Refresh();
            fenceNumberUpDown.Update();
            fenceNumberUpDown.ResetText();
            fenceNumberUpDown.Select();
            fenceNumberUpDown.Hide();
            fenceNumberUpDown.Show();
            fenceNumberUpDown.Invalidate();

Ответы [ 2 ]

4 голосов
/ 12 ноября 2009

Вот несколько обходных путей, которые я смог придумать или может дать вам другие идеи для решения проблемы.

Обходной путь # 1: Вызовите UpButton () перед установкой значения.

this.numericUpDown1.UpButton();
this.numericUpDown1.Value = 20;

Обходной путь # 2: Расширьте NumericUpDown и переопределите свойство Value.

public class NumericUpDownNew : NumericUpDown
{
    public new decimal Value
    {
        get { return base.Value; }
        set 
        {
            string text = "";
            if(this.ThousandsSeparator)
                text = ((decimal)value).ToString("n" + this.DecimalPlaces);
            else
                text = ((decimal)value).ToString("g" + this.DecimalPlaces);

            Controls[1].Text = text;
            base.Value = value;
        }
    }
}
2 голосов
/ 08 августа 2016

Я только что столкнулся с этой же проблемой, и нашел другой обходной путь, который некоторые пользователи могут предпочесть:

numUpDown.Text = " ";
numUpDown.Value = 12.34m;

Просто установив Text (скрытое свойство, которое IntelliSense не предлагает, но существует, хотя) в нечисловое значение (но не пустое), вынуждает элемент управления отображать новое значение. Если вы не назначите Value какое-либо число впоследствии, оно восстановит последнее действительное значение, которое имел элемент управления.

...