DOBON.NET DOBON.NETプログラミング掲示板過去ログ

変換中のKey取得

環境/言語:[OS : Windows XP Professional / 言語 : Visual Basic .NET / .NET Framework : 1.1]
分類:[.NET]

RichTextBoxを使用して全角かな入力で変換確定前の入力文字(文字の下に変換中の下線がある状態でのKey)を取得したいのですが、ご教授いただけないでしょうか?
詳しいオペレーションとしては、FormにRichTextBoxを貼り付けて、FormのKeyPreviewをTrueに設定した状態で実行し、RichTextBoxへフォーカスを当て
「半角/全角」キーを押下し全角かな入力モードにします。
そこで「あいうえお」などの入力をした際に「あ」→「a」、「い」→「i」
などのKeyが取得できません。(もちろんKeys.AやKeys.Iといった取得も
ダメでした。)

KeyDown、KeyPreview、KeyUpイベントはもちろん、
ProcessDialogKeyをオーバーライドしてKeyコードを取得したり、
RichTextBoxを継承したユーザーコントロールを作成してIsInputKeyを
オーバーライドしてKeyコードを取得したのですが、
変換中のキーボード入力は何を押下しても「Keys.ProcessKey」が取得できる
のみで、どのキーが押下されたのかを判断できません。

よろしくお願いいたします。
  • 題名: Re[1]: 変換中のKey取得
  • 著者: medaka
  • 日時: 2005/05/20 17:35:55
  • ID: 10888
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
ProcessCmdKey フォームをオーバーライド

その時の msg.LParam.Toint32 を調べると
IME漢字変換中でも拾えるようです
'1' だと 131073
'A' だと 1966081

msg.GetLParamで変換できそうですが私にはわかりません。
気になる・・・
> KeyDown、KeyPreview、KeyUpイベントはもちろん、
> ProcessDialogKeyをオーバーライドしてKeyコードを取得したり、
> RichTextBoxを継承したユーザーコントロールを作成してIsInputKeyを
> オーバーライドしてKeyコードを取得したのですが、
> 変換中のキーボード入力は何を押下しても「Keys.ProcessKey」が取得できる

変換中の場合はKeyDownイベントが発生したときは実際のKeyCodeは
一旦バッファに入っています。従って、ProcessKey(VK_PROCESSKEY)
しか生成されませんが、KeyUPイベントではKeyCodeに実際の
コードが入っています。従って、KeyUPイベントのKeyCode等を調べれば
"あ"なら"A"が得られると思います。
  • 題名: Re[1]: 変換中のKey取得
  • 著者: DUNE
  • 日時: 2005/05/23 12:26:03
  • ID: 10902
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
medakaさん、 antさん ありがとうございます。

antさんの仰るとおり、KeyUpイベントではKeyCodeが取得できました。
しかし、現状の仕様でキーを押しっぱなしにした場合にKeyCodeが取得できない
のは少々具合が悪い為、やはり「キーを押下したタイミング」でKeyCodeを取得
する方向で考えたいと思います。

medakaさんの仰るように、ProcessCmdKeyの引数であるmsgに一意認識できる
KeyCodeらしきものを確認いたしました。
未だ使用方法がよくわからない為、そのあたりを調べていきたいと思います。

お二方共、ありがとうございました。大変参考になりました。
お気づきの点がございましたら、また力添えをお願いいたします。

DOBON.NET | プログラミング道 | プログラミング掲示板