2010-11-13 65 views
11

我有一些DateTimePicker以永不更新的形式。
我試過ValueTextInvalidate()然後Update(),也Refresh() ...DateTimePicker永不更新!

似乎沒有任何從當前日期更改它們的值!
無論我設置什麼,當前日期都是(相對)今天的!

這是一個.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

+0

您是第一個報告此錯誤的人 – 2010-11-13 19:17:44

+0

您是否爲datetimepicker設置了「MinDate」?你確定沒有人會覆蓋你的價值嗎?因爲我認爲說在框架中沒有錯誤是相當安全的;-) – 2010-11-13 19:19:03

+0

您是否嘗試將Value設置爲'DateTime.Parse(user.BirthDay.ToString())'? – 2010-11-13 19:19:28

回答

18

一個小提示這個煩惱:我的問題是,我有的DateTimePicker設置檢查=假和(錯誤)ShowCheckbox = false; 有了這個設置,我可以設置爲DTPicker無論我想要什麼值,但它不會自我更新。

+0

地獄我必須嘗試一下! – Vercas 2011-01-29 09:24:40

+0

這是問題所在,它發生的原因是,當您右鍵單擊「重置」DateTimePicker值時,它會將「檢查」更改爲False! – WhoIsRich 2011-05-04 15:24:32

+0

這也爲我做了工作,但是,我有兩個TabPage控件與包含的控件的嵌套類型完全相同,對於其中一個我從來沒有任何問題。在另一個TabPage上,(DateTimePicker)控件永遠不會在UI上更新,但將DateTimePicker設置爲True可以解決此問題(再次,另一方面,它可以同時處理這兩個設置)。 – Gorgsenegger 2012-05-04 08:15:36

1

不更新其外觀的窗體的標準診斷,但你看到與調試器更新屬性就是使用錯誤的窗體實例。像這樣的例子:

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

通過改變這樣的代碼診斷此:

dateTimePicker1.Value = user.BirthDay; 
this.Show(); // <=== add this 
+0

有趣的答案,但恐怕情況並非如此。控件在'Form.Load'事件中更新,當窗體和控件已經可見時觸發。同時設置'MinDate'或'MaxDate'似乎不起作用! – Vercas 2010-11-14 19:00:02

+0

當Load事件觸發時,表單* *不可見。如果是的話,那就是錯的。設置一個斷點並查看調用堆棧。確保你沒有看到構造函數。 – 2010-11-14 19:20:55

+0

恐怕它是可見的! – Vercas 2010-11-14 19:32:24