[VB2005]Application.EnableVisualStyles 需最優先執行

當使用 WinXP 樣式的視窗時,須將 Application.EnableVisualStyles 最優先執行,否則可能發生不可預期的不正常行為,主要的原因在於 WinXP 樣式所使用的通用控制項為 5.xx 版,Win2003/Vista 則使用 6.xx 版,此問題由 5.xx 版造成,不過美國微軟那邊似乎沒意願再回頭更新 WinXP ,所以開發者可能要注意一下。
以此案例來說這兩行要對調成為這樣才可正常執行:

          Application.EnableVisualStyles()

          Dim fMain AsNew Form1

若是全域變數,則: 

Module modStartup

     Dim fMain AsForm1

     PublicSub Main()

          Application.EnableVisualStyles()

          fMain = New Form1

Application.Run(fMain)

     EndSub

EndModule

發問內容跟結果如下:


標題:
ListView 類別在 WinXP 特定狀態下顯示不正常
(.Net framework 2.0 內建類別。)
造成問題:
無法正確顯示畫面
重現步驟(產生之專案如附件壓縮檔):
1.
程式碼較為繁瑣,請直接利用附件專案開啟並執行。
2.
附件程式碼說明:
在 Windows 2003 SP2 及 Vista 下執行後,點選 Button1 按鈕,可得正常顯示畫面:
在 Windows XP 下點選 Button1 則無法正確顯示圖形 (目前測試 5 台 WinXP 均有此情形) ,其中一台 WinXP 為 SP2 ,Microsoft Update 到 2007/9/12 。
Windows 2000 則未測試。
3.
經過測試過濾後,在 WinXP 上變更下列 a, b, c 三種任一狀態(或)時,均可回復正常顯示。但專案之邏輯架構須為測試專案狀態,所以以下變更方式僅供貴方尋找問題參考。
a. 將測試專案內使用 Sub Main (Startup.vb),程式碼中 Application.EnableVisualStyles() 註解掉可正常顯示,但按鈕不會顯示 WinXP 樣式:

Module modStartup

     PublicSub Main()

          Dim fMain AsNew Form1

          Application.EnableVisualStyles()   將此行註解可正常顯示

          Application.Run(fMain)

     EndSub

EndModule

 

 

b. 起始模組改以 Form1 啟動亦正常。
c. 將 Form1 中 PrintPreviewDialog1 移除後,亦可正常顯示。
4. 由於原始專案需要使用到預覽列印對話盒,並從 Sub Main 做為進入點,啟用 WinXP Style ,故上述 a, b, c 均須保留。
連絡資訊:
姓名:鄭子璉
電話: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: Wednesday, October 03, 2007 10:45 AM
To: qvb3377@ms5.hinet.net
Subject:微軟結案確認函(SRT070914810505) – [WinForm] prof/ListView/Imagelist displayed incorrectly if Visual Style enabled
 

先生您好:
謝謝您的來電。敝姓*,我是台灣微軟技術支援工程師,很榮幸有機會為您服務。 

關於這個 case 和您在電話中確認過,您並同意此 case 結案,請參考下列此 case 的處理報告。

問題代號︰SRT070914810505 

問題描述︰[WinForm] prof/ListView/Imagelist displayed incorrectly if Visual Style enabled
當您使用 Application.EnableVisualStyles() 以及 PrintPreviewDialog 控制項時,在 XP 下會發生 ImageList 無法顯示的情況

解決方法︰
這是
Windows XP 作業系統當初設計的問題,由於 EnableVisualStyles 會需要做一些全域初始化的動作,因此若在物件建構後才呼叫 EnableVisualStyles 方法,可能會發生一些無法預期的問題。

因此我們建議,盡量在 Form 形成之前便呼叫 Application.EnableVisualStyles(),讓 EnableVisualStyles 可以先做好所有全域的初始化動作,之後再進行 Form 建構式的呼叫,以避開一些不可預期的錯誤。 

問題狀況  結案

————————————————
技術支援工程師 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 “[VB2005]Application.EnableVisualStyles 需最優先執行

  1. chong

    这是怎么做出来的啊….可以把代码发给我学习吗?谢谢

    喜歡

  2. 子璉

    內文就有寫了,使用 ListView 控制項。
    個人網誌僅做心得發表,若有問題須討論請到
    微軟技術社群討論區
    http://forums.microsoft.com/MSDN-CHT/default.aspx?SiteID=14

    喜歡

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

在 WordPress.com 建立免費網站或網誌.

%d 位部落客按了讚: