Отображение " 00 "вместо" 0 " в элементе управления NumericUpDown

Я позволяю пользователям выбирать дату / время для выполнения запланированной задачи, используя два NumericUpDownуправление.

Я хотел бы, чтобы однозначные значения были дополнены ведущим 0, чтобы отобразить 09:00 вместо 9:0.

5 ответов


окончательное решение заключается в использовании DateTimePickerс ShowUpDown значение True и Format значение Time или Custom. В последнем случае вы бы использовали hh:mm или HH:mm как пользовательский формат.


class CustomNumericUpDown:System.Windows.Forms.NumericUpDown
{
    protected override void OnTextBoxTextChanged(object source, EventArgs e)
    {
        TextBox tb = source as TextBox;
        int val = 0;
        if (int.TryParse(tb.Text,out val))
        {
            if (val < 10)
            {
                tb.Text = "0" + val.ToString();
            }
        }
        else
        {
            base.OnTextBoxTextChanged(source, e);
        }
    }
}

Я должен был сделать это сегодня утром и придумал настраиваемое числовое значение для моего приложения Windows Forms. Вы должны быть в состоянии изменить это достаточно легко, чтобы VB.NET.


Это невозможно с помощью элемента управления NumericUpDown.


У меня есть умная идея~ Почему бы вам не поместить текстовое поле, охватывающее часть textbox элемента управления numericupdown (будет отображаться только прокрутка numericupdown)?

установите текстовое поле с" 00 " в качестве начального значения, затем отключите его, чтобы пользователь не мог управлять вашим текстовым полем.

затем введите следующие коды:

Private Sub numericupdown1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ndFrom.ValueChanged

        If numericupdown1.Value < 10 Then
            textbox1.Text = "0" & numericupdown1.Value
        Else
            textbox1.Text = numericupdown1.Value
        End If


End Sub

class MyNumericUpDown : System.Windows.Forms.NumericUpDown
{
   public override string Text
   {
      get
      {
         return base.Text;
      }
      set
      {
         if (value.Length < 2)
            value = "0" + value;

         base.Text = value;
      }
   }
}