C# Winforms DateTimePicker 自定义格式化为十分之一秒/默认选择为秒

C# Winforms DateTimePicker Custom Formatted to Tenths of a Second / Default Selection to Seconds

我的应用程序当前使用 DateTimePicker 自定义格式来显示 HH:mm:ss。

如何格式化它以允许十分之一秒? 我的第二个问题是,当我进入日期时间选择器时,默认情况下首先选择“小时”部分,是否可以更改此设置以便默认首先选择秒?我注意到,如果您单击上下箭头而不用 Tab 键进入控件,则默认情况下会选择秒部分。

有日期时间选择器方面的专家吗?或者有人对我可以用来实现这些功能的替代方案有想法吗?

下面是它的格式和属性的图片:

这可行

  1. 添加 DomainUpDown 控件

  2. 添加一组相差 0.1 秒的日期时间,并将它们显示为格式化为显示毫秒的字符串。然后您的用户可以上下点击以查看 0.1 秒的增量

        string dateString = "7/9/2015 9:32:45.126 AM";
        DateTime dateValue = DateTime.Parse(dateString);
    
        for (int i = 0; i < 5; i++)
        {
            dtPicker.Items.Add(dateValue.AddSeconds(.1*i).ToString("MM/dd/yyyy hh:mm:ss.fff tt"));
        }
    
  3. 如果您想让用户先选择小时,然后从那里生成您的日期时间增量,它也不会起作用。您可以创建多个数字控件,但此时您可能想要沿着扩展日期时间选择器的路径前进,例如 here.

您可以尝试强制 DateTimePicker 显示毫秒,但这将是一个痛苦的经历。你最好使用 MaskedTextBox。您可以从 sourceforge 下载 TimePicker.cs:https://sourceforge.net/projects/time-picker/

下面是一些示例代码:

    [STAThread]
    static void Main() {
        Application.EnableVisualStyles();
        Form f = new Form();
        var dp = new TimePicker("hh:mm:ss.f", true) { Location = new Point(100, 100) };
        dp.ByValue[2] = false;
        f.Controls.Add(dp);
        var bt1 = new Button { Text = "Now", Location = new Point(110, 130) };
        bt1.Click += delegate {
            dp.Value = DateTime.Now;
        };

        int k = 0;
        dp.ValueChanged += delegate {
            bt1.Text = "Now " + (k++);
        };
        f.Controls.Add(bt1);
        Application.Run(f);
    }