■92490 |
Re[5]: 確定前の文字列がある状態でテキストボックスのフォーカス移動 |
□投稿者/ 田中 -(2019/09/30(Mon) 15:00:38)
| >WebSurferさん 774RRさん 魔界の仮面弁士さん
色々とテストしていただきありがとうございます。 かなり長く困っていた部分ですので(バグとのことで解決には至りませんでしたが) とてもすっきりしました。初めてですが掲示板で相談してよかったと思っています。
ご助言いただきましたとおりMicrosoftForumsには書き込みをしてみました。 ※初めて書き込むので不慣れですが、何かフォローすべきことがあれば 教えていただけますと幸いです。
https://social.msdn.microsoft.com/Forums/ja-JP/c84d040b-b85b-4f85-a7d1-e76de274b8e5?forum=netfxgeneralja
根本的な解決については、バクの解消となるかと思いますが、 そちらはMicrosoftForumsで検討していきますが。
(かなり昔から存在しているバグのようなので希望を薄く感じており) こちらの掲示板では回避を検討できないか考えておりますので、 もう少しお付き合いいただけますと幸いです。
回避策を2つ考えたのですが、もしもう少し工夫したほうが良いとか、 このソースをもとに何か良いご意見いただけましたら幸いです。
※今回の問題とは未関係ですが、2番の方法を応用すると OSの設定を変更しなくても、IMEモードを半角カタカナ等に 変更できることがわかりました。
1.少し原始的ですが、SendKeysでエスケープキーのキーイベントを送信する。
Private Sub TextBox_GotFocus(sender As Object, e As EventArgs) Handles TextBox1.Enter, TextBox2.Enter, TextBox2.Enter SendKeys.Send("{ESC}") SendKeys.Send("{ESC}") SendKeys.Send("{ESC}") End Sub
2.Text Services FrameworkにてInputScopeを変更し、別のInputScopeとして認識させて 変換中のテキストをキャンセルさせる。
<DllImport("msctf.dll", SetLastError:=True, CharSet:=CharSet.Auto)> Private Shared Function SetInputScope(ByVal hwnd As IntPtr, ByVal inputscope As IntPtr) As IntPtr
End Function
Private Sub TextBox_Enter(sender As Object, e As EventArgs) Handles TextBox1.Enter, TextBox2.Enter, TextBox3.Enter 'SetInputScope(DirectCast(sender, TextBox).Handle, 40) 'アルファベット SetInputScope(DirectCast(sender, TextBox).Handle, 44) '日本語入力 'SetInputScope(DirectCast(sender, TextBox).Handle, 45) '半角カタカナ End Sub
Private Sub TextBox_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.KeyPress, TextBox2.KeyPress, TextBox3.KeyPress SetInputScope(DirectCast(sender, TextBox).Handle, 0) 'デフォルト End Sub
|
|