在一个数字增减控件中,显示`00`而不是`0`。

8

我让用户使用两个NumericUpDown控件选择计划任务运行的日期/时间。

我希望一位数字的值在前面加上0,以显示09:00而不是9:0

5个回答

7

最终的解决方案是使用一个 DateTimePicker,并将 ShowUpDown 设置为 True,并将 Format 设置为 TimeCustom。在后一种情况下,您可以使用 hh:mmHH:mm 作为自定义格式。


5
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表单应用程序创建了一个定制的数字上下文。您应该能够轻松地将其更改为VB.NET。


2

我有一个聪明的想法~ 为什么不在numericupdown控件的textbox部分上放置一个文本框(只显示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

1
是的,但这有点hackish,不太干净。我猜你最可能使用标签而不是文本框。 - Clément

2
这是NumericUpDown控件无法做到的。

谢谢!那我得使用 DomainUpDown - Clément

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接