トップ回答者
IMEの変換モードが勝手に無変換になる

質問
-
VB2008でMDIフォームアプリケーションを開発しています。
開発したアプリケーションにおいて、使用中にIMEの変換モード(「般」、「無」等の部分)が
勝手に無変換(「無」)になってしまうという現象が発生しています。
ただ必ず発生するものではなく、現象が発生するタイミングとして、
1.ある特定の非標準コントロールからモーダルフォームを表示し、呼び出し元フォームへ戻った際
2.単にTextBox等の間でカーソルを移動した際
の2点が報告されていますが、動作環境のOS、IMEの種類やバージョンも様々で、
IEのバージョン、インストールされている.Net Frameworkのバージョンも確認しましたが
現時点で発生環境の特定には至っていません。
(現象の発生したOS:Windows 7、Windows XP SP2、Windows XP SP3)
(現象発生時のIME:Microsoft IME、Microsoft IME Standard 2002 ver.8.1、Microsoft Natural Input 2002 ver. 8.1、Microsoft Office IME 2007 etc.)特定の非標準コントロールを使用したフォームでのみ発生するようなのですが、
当方未確認ではありますがアプリケーションのユーザーから、「Excelの使用中にも無変換になった」との報告を受けていますので、
原因は他にあるのではと考えています。IMEについて少し調べ、本件とは内容は異なりますが「詳細なテキストサービス」についていくつか問題が報告されているようなので、
アプリケーションのプロパティにて「詳細なテキストサービスを無効にする」のチェックを入れて使用していただきましたが、
現象を回避することはできませんでした。
現在は、根本的な解決にはなりませんがアプリケーションを使用していただいているユーザーへの対応として、
APIによる変換モードの制御を行っています。
この制御の内容ですが、TextBox等のEnterイベントにて変換モードを取得し、無変換であれば強制的に一般に設定する、というもので、
これを入れてからは、表面上現象は発生していないようです。
原因につきまして何かご存知の方いらっしゃいましたらよろしくお願いいたします。
また、同じ現象が発生している方も、情報交換等できればと思いますのでよろしくお願いいたします。
回答
-
長く放置してしまい大変申し訳ありません。
その後の調査で、「非標準コントロールにフォーカスがある状態でモーダルフォームを表示した場合」に現象が発生することがわかりました。
ただ、Excel 単独での現象はその後報告もなく、全く進んでいないというか、当方のアプリケーションとは全く別の原因なのではないかということで保留になっています。アプリケーションでは、モーダルフォームを表示する直前に同じフォーム上のボタンにフォーカスを移し、モーダルフォームを閉じた直後にフォーカスを戻す、という対応を入れて現象を回避しています。
現象の発生する条件が全て特定できていないのでスッキリとはいきませんが、他に支障のない対応で 100% 回避できているようなので、ひとまずはこれでよしとします。
温かい日差しさんの現象もモーダルフォームが関係しているようでしたら、上記の対応を試してみるといかがでしょうか。
- 回答の候補に設定 ひらぽんModerator 2014年10月22日 2:01
- 回答としてマーク MMTRS 2014年10月22日 2:05
-
その後、進展がありました。
>APIを使って変換モードが無変換であれば一般に設定するという対応も…
現象が発生するシーンでAPIを叩いても効きませんでした。
(非標準コントロールによるIME制御とのバッティングか?)
当方のアプリケーションですが、非標準コントロールを常時入力モードで使用しています。
あるセルにフォーカルがあり編集中であるときに、ファンクションキーが押されたら
モーダル画面を開くのですが、この開く前にセル編集中の値を編集終了により確定させています。
この編集終了を行わずにモーダル画面を開くと、変換モードが無変換になる現象が起きなくなりました。
しかし、編集終了による編集中の値の確定の処理は必要なため、他の手段がないかを探ったところ
編集終了(確定)後に再度セル編集を開始すれば、無変換になる現象が発生しなくなりました。
根本的な解決ではありませんが、この「再度セル編集を開始する」という方法で
変換モードが無変換になってしまう現象を回避させようとリリースに向けて作業を進めています。
MMTRSさんとは一致しないかもしれませんが、情報としてコメントしておきます。
すべての返信
-
問題をより明確にしたほうがよさそうです。
1.ある特定の非標準コントロールからモーダルフォームを表示し、呼び出し元フォームへ戻った際
2.単にTextBox等の間でカーソルを移動した際2番ですが、1番とは全く関係ない状況・・・例えば非標準コントロールからモーダルフォームを起動してないにも関わらず発生するのでしょうか?
特定の非標準コントロールを使用したフォームでのみ発生するようなのですが、当方未確認ではありますがアプリケーションのユーザーから、「Excelの使用中にも無変換になった」との報告を受けていますので、原因は他にあるのではと考えています。
これはよく確認したほうがよさそうですね。もしかしたら 「Excelの使用中」 と 「ある特定の非標準コントロールからモーダルフォームを表示し、呼び出し元フォームへ戻った際」 がたまたま重なっていただけかも知れません。
ひらぽん http://d.hatena.ne.jp/hilapon/ -
>2番ですが、1番とは全く関係ない状況・・・例えば非標準コントロールからモーダルフォームを起動してないにも関わらず発生するのでしょうか?
全く無関係に発生します。ユーザー側でアプリケーションの再起動後に確認していただきました。
>これはよく確認したほうがよさそうですね。もしかしたら 「Excelの使用中」 と 「ある特定の非標準コントロールからモーダルフォームを表示し、
>呼び出し元フォームへ戻った際」 がたまたま重なっていただけかも知れません。すみません、書き忘れました。
「Excelの使用中」には当方のアプリケーションは起動しておらず、アプリケーション側では同時にExcelが起動していたかどうかに関係なく
現象が発生する、とのことです。 -
単にTextBox等の間でカーソルを移動した際にも、勝手に無変換となるということですので、
非標準コントロール、エクセル等関係なく発生している可能性もあります。
(アプリケーション自体の原因ではない可能性)
原因の切り分けとして、以下確認をしてみてはいかがでしょうか。
1.再現性、挙動
・現象は必ずこの箇所で100%発生する、といったものであるのか
・再現する箇所は、何かの処理の間であるのか
->たとえばフォーカス移動時
->たとえばフォームクローズ時
->たとえばTab移動時 など
・何かの処理の間ではなく、単にテキスト入力中にも突然切り替わるのか
・エクセル以外のソフト(エディタやワード等)の編集中でも同現象が発生しているか
2.検証
運用中のアプリケーションは様々な処理が書かれていると思いますので、再現検証用として、
単純にテキストボックスを2つ配置しただけのフォームを持つアプリを作成し、
現象が発生する端末で再現テストを根気よく行ってみてはいかがでしょうか。
3.他の要因の可能性
IME関連を操作している可能性がある駐屯ソフトなど起動していないですか?
アプリケーションとは別の所に原因がある可能性も考えられます。
4.IMEの設定
正常に動作している端末のIMEの設定内容と、現象が発生するIMEの設定内容を
比較してみたり、比較して同じでも、発生する端末では再設定してみたり。
IMEが原因である可能性もあるかもしれません。
-
すみません、書き忘れました。
「Excelの使用中」には当方のアプリケーションは起動しておらず、アプリケーション側では同時にExcelが起動していたかどうかに関係なく現象が発生する、とのことです。
もしかすると 「ある特定の非標準コントロール」 は関係ない可能性もあります。配布しているアプリですが、特にサービスや常駐ソフトを起動させたりしているわけではないのですよね?
もしそうでないなら、いったん OS を再起動し、アプリを起動する前に EXCEL を起動して、同様の現象が発生するか確認してみる必要があると思います。
逆にアプリ起動後のみ EXCEL で現象が発生となると、「ある特定の非標準コントロール」を疑う必要はありそうです。
ひらぽん http://d.hatena.ne.jp/hilapon/ -
>honefaiさん
>1.再現性、挙動「1.ある特定の非標準コントロールからモーダルフォームを表示し、呼び出し元フォームへ戻った際」に関して、
特定のPC(Windows 7 + Microsoft IME)では100%発生していました。ただ同様の処理を行う別のフォームでは発生しませんでしたので、そこに何か手がかりがあるとは思うのですが
これらのフォームは非常によく似たもので、発生するフォームにだけ特別なコントロールを使用しているわけでもなく
違いというとフォームに張り付いているコントロールの数くらいです。
各フォームで行う処理についても、細かい部分での違いはあるものの
「ある特定の非標準コントロールからモーダルフォームを表示し~」の部分は全く同じコードでの実装です。現象が発生する箇所とその他のソフトで同様の現象が発生しているかについてはこれから詳しく調べてみたいと思いますが、
「単にテキスト入力中に突然」という報告は今のところ受けていません。
>2.検証単純なアプリをいくつか作成し繰り返しテストは行っていますが、現象の発生するPCが現時点でユーザー側にしかなく、
検証が難しいという状況になっています。開発PCで再現してくれれば少しは楽になると思うのですが。
>3.他の要因の可能性全ての現象発生PCで確認したわけではありませんが、IME関連を操作している可能性がある駐屯ソフトなどは見当たりませんでした。
>4.IMEの設定現象の発生するPCが現時点でユーザー側にしかないため調査には少し時間がかかるかと思いますが、詳細確認してみます。
>ひらぽんさん
>もしかすると 「ある特定の非標準コントロール」 は関係ない可能性もあります。私としては関係ないのではないかと思っています。
>配布しているアプリですが、特にサービスや常駐ソフトを起動させたりしているわけではないのですよね?
>もしそうでないなら、いったん OS を再起動し、アプリを起動する前に EXCEL を起動して、同様の現象が発生するか確認してみる必要があると思います。
>逆にアプリ起動後のみ EXCEL で現象が発生となると、「ある特定の非標準コントロール」を疑う必要はありそうです。アプリはSQL Serverを使用したデータベースアプリで、単純にデータベースとやりとりするためのものです。
他のサービスや常駐ソフトの起動等はしていません。
Excelでの現象発生手順については全くわからず、再現性のあるものかどうかも現時点で把握できていないのですが、調査してみます。
全体として、先にも記述しましたが「現象の発生するPCが現時点でユーザー側にしかない」ことでなかなか思うように調査が進まないこと、
せっかく協力していただいているのに申し訳ないです。
できるだけ早く情報を提供できるよう努力いたします。 -
4年以上も前のスレッドなので、その後どうなったのか、回答付かない可能性が高そうです。
「非標準コントロール」とは何か、機種・OS・IEのバージョン・SPの適用有無等、可能な限り情報を提供されると、何か糸口が見えてくるかも知れません。
また一部のマシンのみ現象が発生し、しかも客先マシンのみ発生となると、調査が難しいという問題もあります。
私の関わるプロジェクトでは、客先PC固有の問題を解決するため TeamViewer を導入し、問題を解決することができました。一応参考まで。
MSDNフォーラムのヘルプは以下ご覧ください http://social.technet.microsoft.com/wiki/contents/articles/7359.forums-help-faq.aspx
- 編集済み ひらぽんModerator 2014年10月16日 3:35 誤字修正
-
長く放置してしまい大変申し訳ありません。
その後の調査で、「非標準コントロールにフォーカスがある状態でモーダルフォームを表示した場合」に現象が発生することがわかりました。
ただ、Excel 単独での現象はその後報告もなく、全く進んでいないというか、当方のアプリケーションとは全く別の原因なのではないかということで保留になっています。アプリケーションでは、モーダルフォームを表示する直前に同じフォーム上のボタンにフォーカスを移し、モーダルフォームを閉じた直後にフォーカスを戻す、という対応を入れて現象を回避しています。
現象の発生する条件が全て特定できていないのでスッキリとはいきませんが、他に支障のない対応で 100% 回避できているようなので、ひとまずはこれでよしとします。
温かい日差しさんの現象もモーダルフォームが関係しているようでしたら、上記の対応を試してみるといかがでしょうか。
- 回答の候補に設定 ひらぽんModerator 2014年10月22日 2:01
- 回答としてマーク MMTRS 2014年10月22日 2:05
-
その後、進展がありました。
>APIを使って変換モードが無変換であれば一般に設定するという対応も…
現象が発生するシーンでAPIを叩いても効きませんでした。
(非標準コントロールによるIME制御とのバッティングか?)
当方のアプリケーションですが、非標準コントロールを常時入力モードで使用しています。
あるセルにフォーカルがあり編集中であるときに、ファンクションキーが押されたら
モーダル画面を開くのですが、この開く前にセル編集中の値を編集終了により確定させています。
この編集終了を行わずにモーダル画面を開くと、変換モードが無変換になる現象が起きなくなりました。
しかし、編集終了による編集中の値の確定の処理は必要なため、他の手段がないかを探ったところ
編集終了(確定)後に再度セル編集を開始すれば、無変換になる現象が発生しなくなりました。
根本的な解決ではありませんが、この「再度セル編集を開始する」という方法で
変換モードが無変換になってしまう現象を回避させようとリリースに向けて作業を進めています。
MMTRSさんとは一致しないかもしれませんが、情報としてコメントしておきます。 -
温かい日差しさん、情報提供ありがとうございます。
>現象が発生するシーンでAPIを叩いても効きませんでした。
>(非標準コントロールによるIME制御とのバッティングか?)私も別のスレッドで教えていただいた通りには制御ができなかったので、いろんな条件がそろわないとうまくいかないのかも知れませんね。
でも、API を使わずに現象を回避できるのであれば、API は使わないに越したことはないと思いますので、結果的にはより良い対応ができたみたいですね。
>この編集終了を行わずにモーダル画面を開くと、変換モードが無変換になる現象が起きなくなりました。おそらく私も同じコントロールを使用していると思われますので、時間のあるときにこちらでも確認してみようと思います。
もし私の環境でも同じことが確認できれば、私が対応した「モーダルフォームを表示する直前にフォーカスをボタンに移す」という処理については、「セルが編集状態のままモーダルフォームを表示する場合は、わざわざフォーカスをボタンに移す必要はない」ということになりますので、大変参考になります。
温かい日差しさんの対応方法も「回答としてマーク」させていただきました。
ありがとうございました。- 編集済み MMTRS 2014年10月29日 9:49