2009年8月7日

讓人不知所措的 OpenFileDialog.InitialDirectory in PPC 開發

在 .NET Compact Framework 環境下,很多方法都受到限制
本篇要講的 OpenFileDialog.InitialDirectory 正是一例

Ⅰ. OpenFileDialog.InitialDirectory in PPC

在 Windows Form 裡使用 OpenDialogFile 要指定初始目錄
多半會用 Environment.GetFolderPath 方法來取得特定資料夾
再配上相對路徑達到初始化目錄的效果 (如下圖

但 InitialDirectory 這個屬性到了 PPC 開發上,就整個被閹割了
OpenFileDialog 只能指定 My Document SD 卡 底下的第一層目錄
是的,就只能指定第一層,否則系統會自動跑回預設根目錄

所以 InitialDirectory 屬性的設定如下圖


圖中的 MyNewFolderUnderMyDocument
即是指 \\My Documents\\MyNewFolderUnderMyDocument
\\Storage Card\\MyNewFolderUnderMyDocument

而且很神奇的 (應該說是愚笨?)
兩邊都有此目錄,OpenFileDialog 便會列出兩個目錄下的所有檔案
(因為不曉得要指定的是哪個資料夾,所以全列出?)

Ⅱ.解決方法

坎尼問了谷歌大神,他說這個問題也是困擾了很多人
可能的解決方式有
  • 繼承 FileDialog 再寫個 OpenFileDialog Class
  • 自己寫個 Form 取代原本的 Class (山寨版)
坎尼是選擇後者,利用了 System.IO 去抓取 Directory 及 File 資訊
但目前只做出雛型,效能上還令人不甚滿意 (下面是部分執行畫面

自己做的檔案開啟 Form


比較一下原本的 OpenFileDialog.ShowDialog
UI上有稍做調整


下拉選單直接將列出目錄路徑


所有資料夾皆會列出

Ⅲ.小結

自行開發的 OpenFileDialogForm 也實作了下列三個屬性
(坎尼平常也只會用到這三個屬性,其他屬性要等真正需要時再去實作)
  1. InitialDirectory
  2. Filter
  3. SelectedPath
接下來的任務就是調整效能啦,在 PPC 上的開發首重就是執行效率
除非是很值得讓使用者等待的資訊,不然一般人大多不會等下去
這是開發 PPC 及 Windows Mobile 系統時要時時注意的一件事

沒有留言:

Google Spreadsheet 裡用規則運算式

最近因為工作關係,遇到要用 Google Form 及 Google Sheet 所以研究了 Google Sheet 裡的一些 function 怎麼用 首先,分享一下如何在 Google Sheet 裡用規則運算 :D