【问题标题】:TimeSpan picker in DataGridView that allow more than 24 hoursDataGridView 中允许超过 24 小时的 TimeSpan 选择器
【发布时间】:2012-12-06 04:54:30
【问题描述】:

我需要一种方法来创建允许超过 24 小时的 TimeSpan 时间选择器列。现在,我得到了一个派生自 DateTimePicker 的 TimePicker,但在 24 之后,它变回零。而且我没有找到改变它的行为的方法。

请帮忙。

谢谢!

【问题讨论】:

  • 你到底得到了什么 TimePicker?我不熟悉 .NET 框架中同名的类。
  • 我找到了一种使用 DateTimePicker 的方法,它可用作 TimePicker。如果您仔细查看 DateTimePicker,您可以将它用作 TimePicker。我必须在网上找到一个示例才能在 DataGridView 中使用它。但是 DateTimePicker 只允许您输入“一天中的时间”,我想输入一个小时数,最多可以输入一整周(7 * 24 = 168 小时)。
  • 嗯,你可以将它用作一天中的时间选择器,是的,但它绝对不是为这样的事情而设计的。但是,如果您只对小时数感兴趣,难道您不能只用一个 TextBox 记录小时数,然后使用new TimeSpan(inputHours, 0, 0)?如果您输入 50 多个小时,TimeSpan 对象将从那里简单地处理它。
  • 是的。这就是我现在正在做的事情。让我更喜欢一个工具,让我一起使用两个 NumericUpDown 来帮助用户输入数据。你知道我有什么办法吗?
  • 嘿马丁,我继续为你扩展我的答案。

标签: c# winforms datagridview timespan


【解决方案1】:

就像您在 cmets 中所想的那样,处理此问题的最简单方法可能是拥有两个 NumericUpDown 控件 - 一个代表天,另一个代表小时。

从那里,您需要添加一些额外的逻辑。这些微调器本身不支持“翻转”,因此您必须自己编写代码。您将这些添加到事件中,并查看MSDN documentation,我认为您正在考虑连接到Click 事件。没有其他东西看起来特别有趣。

您的代码将如下所示:

 private void ctrlUpDownHour_Click(object sender, EventArgs e)
 {
    if(ctrlUpDownHour.Value >= 24)
    {
        ctrlUpDownDay.Value += 1;
        ctrlUpDownHour.Value -= 24;
    }
 }

如果您将 ctrlUpDownHour.Maximum 属性设置为 24 也可能会有所帮助。

编辑:正如 cmets 中所述,处理您的情况的最简单方法可能是简单地创建一个user control

只需使用两个 NumericUpDown 控件创建一个新的用户控件 - 通过在您的项目中创建一个新项目并单击“用户控件”项目来开始 - 这会让您很好地开始。

然后,您可以根据需要直观地设计NumericUpDown 控件。处理完之后,你可以进入你的代码隐藏,并得到一些看起来像这样的东西:

public partial class UserControl1 : UserControl
{
    public UserControl1()
    {
         InitializeComponent();
         // anything else you want to do here
    }

    public TimeSpan GetSelectedTimeSpan()
    {
       return new TimeSpan((int)numericUpDown1.Value, (int)numericUpDown2.Value, 0, 0);
    }
}

然后,您可以将此用户控件与其他任何表单上的任何其他控件一样放置。然后,当您需要其中的 TimeSpan 时,您只需像捕获任何其他控件一样捕获控件并转到 userControl1Instance.GetSelectedTimeSpan()

Blammo,完成。

【讨论】:

  • 好的...但是我需要一个示例来说明如何在 DataGridView 中构建它...我不知道如何构建包含两个控件的 DataGridViewColumn。
  • @MartinLabelle:您可以创建一个 UserControl,它上面有两个 NumericUpDown 控件。然后,您可以将 UserControl 的实例添加到 DataGridView。
  • 老板改变主意了,我用的是MaskedTextBox。但我接受你的回答,因为这是我问题的一个很好的例子。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-31
  • 2011-12-11
相关资源
最近更新 更多