独自ファイルダイアログ(http://florianswiki.dyndns.org/Web/16)

結局、車輪の再発明を半日かけて行っていました。
一応それっぽいファイル選択ダイアログを.Net Compact Framework上で実装しています。DLLの形になっていて、ソースも(コメントろくすっぽありませんが(^^;)。バグフィックスがてら追加します)存在しますので、他のアプリでの再利用も可能です。
ただ、ほんとに作ったばかりで、その上あちこち模索しながらの実装ですので抜けがかなりあると思います。しばらく使ってみて、見つけていかないとStableとは言い難いですが、興味がある人は見てみてください。
あと、謎のタブ「Tree」は、見なかったことにしてください(^^;)。目一杯実装途中です。その上、実装する意味があるかどうかって感じですし。


しかし、WindowsCEはこの手の車輪の再発明が妙に多くて(^^;)、tGetFile.dllや、gsGetFile.dll、FermesSDKやなど、みんながみんな同じような方針でファイル選択ダイアログを作っているみたいですね。
一応今回のコンセプトとして、「開く前にある程度判るように」ということを優先しましたので、懐かしのPC-9801の「miel.exe」というビューワを思い出しながら設計しました。
ここにたどり着くまで、

  • tGetFile.dllを.Net Compactから叩く方法(失敗)
  • FIleDialogをサブクラス化してカスタマイズする方法(失敗)
  • DocumentList(Wordとかのあれ)を使う方法(動きはしたけど、Wordとかと同様に使い物にならない)

という紆余曲折を経た末の実装です。はじめから諦めればもう少しスムーズに作れたんだろうなぁ。

国際化

あと、外人がいちゃもんつけてくる前に(笑)、日本語以外の言語圏では英語メニューになるようにしました。WindowsCEって、海外の方が使われてるみたいですし。
ただ、外部DLLに逃がしたファイル選択ダイアログは、なぜかCultureの設定が「既定の言語」(日本語じゃなくて)になるらしく、どうやっても日本語設定が表に出てきてくれません。
うーむ、Cultureの取り方、まずいのかな? Visual Studio2005標準の方法で取ってると思うんだけど。

独自コントロールをデザイナ経由で置く

もう一つ、これだけで数時間悩んでたのが、自分で作ったUserControlをデザイナ経由でFormに置くこと。
いや、実際には、デザイナなんか使わずに動的に置いても全然おっけーなんですが、せっかくなので、RAD環境でRADに作れればいいなーとあがいて、かえって時間がかかってみたり。そのうえ、あがいたくせに大して解決にならない解決法しか見つけられませんでした。

  1. 通常コントロールで、とりあえず置く
  2. 位置などが確定した時点で、おもむろにDesigner.csを開く。
  3. インスタンスの型と、newの型を書き換える。

……気持ち悪いー。でも、一応動かないことはないようです。Visual Studio 2005のデザイナは優秀だなぁ。そのうえ、なぜか、WindowsCE用に作ったソースのくせに、Win32上でも動いているところがデザイナ上で見られます。今回の作業のために作った、「ファイルのリストを表示する」コントロールが、デザイナ上で動いている(見えているのはルートディレクトリの中身)のは、結構びっくりしますねぇ。動的に再コンパイルでもかけてるのかな? ある意味Smalltalkみたいです。