[bug]在對話盒中動態建立 DateTimePicker 類別在設定 Value 屬性後 Text 屬性會不正常


此問題已經 CSS 確認為 bug ,有點久,問題 2007/9/12 發出,今天才結案。
簡單一點說,就是在控制項動態建立後,使用
Dim pHandle As IntPtr = ctl.Handle
 
強制物件完成動態建立與初始化。
 
 
原始問題:

標題:
DateTimePicker 類別在設定 Value 屬性後 Text 屬性可能會不正常
(.Net framework 2.0 內建類別。)
 
造成問題:
初始化日期不正確
 
重現步驟(產生之專案如附件壓縮檔):
1.
在 VB2005 開發環境下開新 VB 專案取名為 DTPicker
 
2.
在預設的 Form1 拉一按鈕,並點選兩下輸入程式碼:

Public Class Form1

     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

          Form2.ShowDialog()

     End Sub

End Class

 

3.
新增一表單 Form2,並在 Form_Load 加入下列程式碼:

Public Class Form2

     Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

          Dim ctl As New System.Windows.Forms.DateTimePicker

          With ctl

               .Text = "" 註解掉此行則顯示正常

               .Format = System.Windows.Forms.DateTimePickerFormat.Custom

               .CustomFormat = "yyyy/MM/dd HH:mm:ss"

          End With

          Me.Controls.Clear()

          Me.Controls.Add(ctl)

 

          ctl.Value = DateTime.Now.Date

          Me.Text = ctl.Value & "-" & ctl.Text

     End Sub

End Class

 
4.
執行本專案。點選 Button1 一次,得下圖:
 
將 Form2 關閉再點選 Button1 一次,得下圖:
 
由此兩次圖形比較,類別 DateTimePicker 第二次並未完成 .Value 引起 .Text 內容的變更,標題也顯示不正確,造成第二次顯示的對話盒初值不正確。
 
5. 將 Form2 中程式碼 .Text = "" 註解掉,則可得到正常顯示結果,但 .Text 屬性卻抓不到,仍造成標題顯示不正常。

Public Class Form2

     Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

          Dim ctl As New System.Windows.Forms.DateTimePicker

          With ctl

               ‘.Text = "" ‘ 註解掉此行則顯示正常

               .Format = System.Windows.Forms.DateTimePickerFormat.Custom

               .CustomFormat = "yyyy/MM/dd HH:mm:ss"

          End With

          Me.Controls.Clear()

          Me.Controls.Add(ctl)

 

          ctl.Value = DateTime.Now.Date

          Me.Text = ctl.Value & "-" & ctl.Text

     End Sub

End Class

 
第一次點選 Button1 如步驟 4 ,第二次點選 Button1 如下圖:
 
DateTimePicker 已正確顯示,但標題仍顯示不正確
 
 
 
連絡資訊:
姓名:鄭子璉
電話:xxxxxxxxxx / xxxxxxxxx
技術支援服務合約編號:xxxxxxxxx
 

背景:
以下軟體皆為繁體中文版 (MSDN VST 版)
OS: Windows 2003 R2 SP2 + Windows Update (2007/9/12)
開發工具: Visual Studio Team Suite 2005 8.0.50727.762 (SP.050727-7600)

 
最終結案原因:

Sent: Thursday, October 11, 2007 3:12 PM
Subject: 微軟回覆您的問題(SRT070913810389) – DateTimePicker 類別在設定 Value 屬性後 Text 屬性可能會不正常

鄭先生您好:
謝謝您的來電。敝姓*,我是台灣微軟技術支援工程師,很榮幸有機會為您服務。關於您遇到的問題,請參考以下報告。若步驟中有任何不清楚或需要進一步的協助,為避免我們因在電話中而耽誤接聽您電話的時間,建議您先以 EMAIL 方式回覆給我,我將在收到您的來信後儘速與您連絡,謝謝。

問題代號SRT070913810389 

問題描述DateTimePicker 類別在設定 Value 屬性後 Text 屬性可能會不正常

解決方案︰

這是一個已知的問題,由於 DateTimePicker 控制項使用的是 Windows OS 所提供的 Date Time picker 控制項,因此有可能會是 OS 底層的問題,此問題與 OS 相關,並不全然是 DateTimePicker 本身的問題。

會發生這個狀況乃是因為在 Form_Load 中對 DateTimePicker 控制項進行初始化的動作時,DateTimePicker 控制項的 Handle 尚未建立,因此以下有幾種 workaround 供您參考:

1.       使用 Form.Dispose()

2.       將初始化的動作移至 Form_Load 外進行

3.       在使用 Text 屬性之前加入下列程式碼已取得控制像的 Handle (附檔為此方法的 sample)

Dim p As IntPtr

P = ctl.Handle

 

Public Class Form2

    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim ctl As New System.Windows.Forms.DateTimePicker

        Dim p As IntPtr

        p = ctl.Handle

        With ctl

            .Text = "" 註解掉此行則正常

            .Format = System.Windows.Forms.DateTimePickerFormat.Custom

            .CustomFormat = "yyyy/MM/dd HH:mm:ss"

        End With 

        Me.Controls.Clear()

        Me.Controls.Add(ctl)

        ctl.Value = DateTime.Now.Date

        Me.Text = ctl.Value & "-" & ctl.Text

    End Sub

End Class

請參考上述三種處理方式,再視您的需要決定採用何種方案。

請您參考上述資訊,若有任何不清楚或需要進一步協助,請儘速與我連絡,謝謝!

技術支援工程師 Support Engineer
Developer Support Team
Global Technical Support Center – Taiwan
技術支援服務首頁: http://support.microsoft.com
技術支援專線: 0800-008-833(市話專用)/ 02-2999-8833
Delighting our customers is our #1 priority. We welcome your comments and suggestions about how we can improve the service provided to you. Please feel free to email our management team at gtscfb@microsoft.com or contact my manager directly at cych@microsoft.com.

Categories: 更新與回報 | 2 則迴響

文章分頁導航

2 thoughts on “[bug]在對話盒中動態建立 DateTimePicker 類別在設定 Value 屬性後 Text 屬性會不正常

  1. 子璉

    補充:
    CSS 那邊有說,由於這是作業系統的問題,所以更新是由作業系統那邊來做,不確定何時會更新,也有可能直接在下版的 Shell Common Control 才做更新。若有更新會另外通知,我再轉貼。

  2. 引用通告: [VB2005] ListView 初始化與 ItemChecked 事件 | 鄭子璉

發表留言

在WordPress.com寫網誌.