14

我有一些DateTimePicker永远不会更新的形式。
我试过Valueand TextInvalidate()然后Update()还有Refresh()...

从当前日期开始,它们的值似乎没有任何变化!
无论我设置什么,当前日期都是(相对)今天!

这是 .NET 3.5 错误还是什么?
(不,我不能在这个项目上使用 .NET 4。)


如果你真的想要一些代码,那么这里是:dateTimePicker1.Value = user.BirthDay;. 另外,如果我写,MessageBox.Show(user.BirthDay.ToString());我会得到一个漂亮的盒子,告诉用户的生日(我的生日,在我的机器上)。(所以变量中有一个值......)


我还应该提到它们仅用于日期而不是时间吗?


好的,我看到我需要写更多:

首先,更新控件的方法订阅了Form.Load事件。因此,当表单和控件可见且“正在运行”时,它会被调用/触发/调用。

其次,看看这段代码及其结果:

MessageBox.Show(user.BirthDay.ToString()); // Shows 12.12.1995 (in my regional format)
dateTimePicker1.Value = user.BirthDay; // assigned to 12.12.1995
MessageBox.Show(dateTimePicker1.Value.ToString()); // Shows today's date!

这不好...输出是今天的日期。(今天我的意思是代码运行的那一天。)

dateTimePicker1.MinDate = new DateTime(1900,1,1); // January 1st, 1900
MessageBox.Show(dateTimePicker1.MinDate.ToString()); // January 1st, 1753 ...

控制不好!1900 不等于 1753!

dateTimePicker1.MaxDate = DateTime.Today;
// In reality, I need it to today's date
MessageBox.Show(dateTimePicker1.MinDate.ToString()); // December 31st, 9998

时间扭曲?O_O

无论如何,整个代码如下所示:

public void Form_Load(object sender, EventArgs e)
{
    this.user = User.Load(path);
    // this.user is a field.
    // path is a static field which holds the absolute path of the file in which is serialized that data of the user.

    MessageBox.Show(user.BirthDay.ToString()); // Shows 12.12.1995 (in my regional format)
    dateTimePicker1.Value = user.BirthDay; // assigned to 12.12.1995
    MessageBox.Show(dateTimePicker1.Value.ToString()); // Shows today's date!

    dateTimePicker1.MinDate = new DateTime(1900,1,1); // January 1st, 1900
    MessageBox.Show(dateTimePicker1.MinDate.ToString()); // January 1st, 1753 ...

    dateTimePicker1.MaxDate = DateTime.Today;
    MessageBox.Show(dateTimePicker1.MinDate.ToString()); // December 31st, 9998
}

那么,有什么解决办法吗?xC

4

3 回答 3

25

这个麻烦的一个小提示:我的问题是我将 DateTimePicker 设置为 checked=false 并且(错误地) ShowCheckbox=false; 通过这个设置,我可以将任何我想要的值设置为 DTPicker,但它不会自行更新。

于 2011-01-28T22:13:07.683 回答
1

表单的标准诊断没有更新其视觉外观,但您使用调试器看到属性更新很好,是使用了错误的表单实例。像这样的例子:

var frm = new Form1();  // Wrong!!
frm.UpdateBirthDay(user.BirthDay);

通过像这样更改您的代码来诊断此问题:

dateTimePicker1.Value = user.BirthDay;
this.Show();   // <=== add this
于 2010-11-13T19:56:19.587 回答
0

我更新顽固的 DateTimePicker 以显示其当前值并更新其相关 DataBindings 的工作是切换其 .Enabled 属性。

myDateTimePicker.Enabled = !myDateTimePicker.Enabled;
myDateTimePicker.Enabled = !myDateTimePicker.Enabled;
于 2019-04-12T21:39:02.313 回答