ここの代表作である
DailyMemo2008
ですが・・・・
いくつかの状態で、不具合が発生します。
・Windows7などで64ビットOSを利用している。
・メディアがマウントされていないドライブがある
・ATOKを入れている
・詳細なテキストサービスの設定を弄っている。
どれか一つでもと言う事でもなく、どれか一つでもなる事も有り、結局なんだか分からなかったのですが・・・・
一番酷いのが、FolderBrowserDialogを表示しようとすると、帰ってこない
コレは、マイコンピュータの状態に依存する事が多いのですが、
あたしが作った所じゃないよ?
って言うのが、あたしの意見です。
まぁ、そう言うあれこれも含めて、たった一カ所の修正で全部治りました。
[STAThread]
コレの位置が間違えていたのです。
初心者のC#ユーザーはprogram.csを編集する事はまずないと思いますが、ある程度弄ってくるとここを編集しないと作成できない機能とかがあるために、いつかは編集するようになるでしょう。
で、あたしも、そんな例に漏れず、プログラムの歴史は長いもののC#はまだ短い。
何処で、どんなことをすれば良いのか問いのは長年のプログラミング知識により分かってしまうので寄り始末が負えない。
program.csを弄りすぎたが故に[STAThread]がなくてはならない位置から移動してしてしまったのです!!
で、未だ試してないので分からないのですが・・・・
起動して直ぐなどにCtrl+Cを実行するとコピーどころか、変な文字が入力されたりする事もあったのですが、コレも治るかもしれません。
で、あたしが、これを本格的に直すきっかけになったのが、Atokの2011導入です。
これまで2009を使っていた頃は何の問題もなかったのですが、2011あたりから(2010も持ってるけど、インストールしていないから分からない)詳細なテキストサービスに対応したため
DailyMemo2008で、漢字入力が出来なくなってしまったのです。
別途、リッチテキストボックスを作成してもダメ、テキストボックスでもダメ、新しいソリューションを作ると、何もしなくても動く
そもそも、IMEがOFFとかONとかって状態ならともかく・・・
IMEが無効ってどういう事なのよ??
で、まぁ・・・動くソリューションと、動かないソリューションで何が違うのかを一つずつ検証するわけです。
2個目コピペしてあっさり判明(笑
それは、main関数の上にDllImportを入れたときに発生しました。
取りあえず、それをコメントアウトしました。
すると、
[STAThread]
がエラーを出して、コンパイルが出来なくなりました。
DllImportとmainの間にstructの宣言があったからです。
このとき漸く、[STAThread]が直ぐしたの項目にだけ掛かる事が分かりました。
コレを、mainの直上に置くと、コレまで起きていたであろう数々の不具合が治った気がしました。
取りあえず、IMEは問題なく動くようになりました。
フォルダの参照も普通に動くようになりました。
あとは・・・?
コピペの時の変な文字が入力される不具合が治れば、それでばっちりな感じがします。
C#にお世話になっている皆さん?
[STAThread]はエントリポイントにちゃんと掛かるようにしましょうね?
あ〜、そうそう、
一応
[MTAThread]
も有るからね?
でも、マルチスレッドアプリを作るからと言って、MTAにする必要はありません。
BackGroundWorkerクラスもそれなりに優秀ですし、
自分で、スレッドを作成しても問題なく動きます。
何より、アプリケーションのコアをマルチスレッドにするのはオススメできませんからね?
そうそう、次に追加する機能は、印刷です。
直接印刷する機能が欲しいと良く言われています。
今は、wordで印刷しているそうですよ?
まぁ、印刷機能は作った事有るし、何とかなるんじゃないかな?
春頃お目見えの予定☆ミ
|