c# - 如何将双 DateTimePicker 数据绑定(bind)到单个 DateTime 对象

标签 c# winforms datetimepicker

我有一个简单的表单,有两个 DateTimePicker 控件:一个用于日期,一个用于时间。问题是这两个控件应该代表一个时间点。因此,我想将它们“绑定(bind)”到表单上的单个 DateTime 属性(为了简单起见)。我做了以下事情:

// Start is a DateTime property on the form
_StartDate.DataBindings.Add("Value", this, "Start"); 
_StartTime.DataBindings.Add("Value", this, "Start");

但是 Hook “ValueChanged”事件会产生混合结果...有时我得到了我想要的,有时属性的更新“缓慢”。我认为这种分成两个 DateTimePicker 的方式相当常见。那么该怎么做呢?

更新:其中可能有多个问题:

  1. 如何将 DateTimePicker(格式:日期)绑定(bind)到表单上的 DateTime 属性?
  2. 那么,如何将另一个 DateTimePicker(格式:时间)绑定(bind)到同一属性?
  3. 我使用的是 Visual Studio Express 2008 (.NET 3.5),并且我似乎在值更改之前从 DateTimePickers 获取了 ValueChanged 事件?

最佳答案

我发现自己有时会遇到这个问题,并且我使用了一种有点丑陋的技术。我没有直接绑定(bind)到该属性,而是在模型上创建了两个附加属性。

//The data I want to bind to
public DateTime Something { get; set; }
//Two new properties
public DateTime SomethingDate { /*...*/ }
public DateTime SomethingTime { /*...*/ }

每个的 get 部分应该只返回 Somethingset 部分是您实现一点逻辑的地方,以确保 Something 始终准确反射(reflect)。

public DateTime SomethingDate
{
    get
    {
        return this.Something;
    }
    set
    {
        this.Something = value.Date.Add(this.Something.TimeOfDay);
    }
}
public DateTime SomethingTime
{
    get
    {
        return this.Something;
    }
    set
    {
        this.Something = this.Something.Date.Add(value.TimeOfDay);
    }
}

现在,您的 Something 属性将始终正确反射(reflect)两个控件相应的日期和时间,同时仅使用我们关心的每个控件的信息更新值。

关于c# - 如何将双 DateTimePicker 数据绑定(bind)到单个 DateTime 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2723729/

相关文章:

c# - Static readonly vs const——不同的程序集 POV?

c# - 多线程http请求

c# - 为什么我们可以从线程池线程修改表单标题?

WPF4 DatePicker - 添加时间

twitter-bootstrap - 禁用几个小时 Bootstrap 日期时间选择器

c# - Web API (.NET Framework) Azure AD 身份验证始终返回 401 未经授权

c# - 如何从不同的线程/类启用计时器

c# - 如何判断何时在 TextBox 中按下了回车键?

javascript - 如何设置开始时间?

c# - Raspberry PI 上 Ubuntu 上的 ASP.NET Core 应用程序