C#でIMEの状態を知るには?

このQ&Aのポイント
  • C#でIMEの状態を知る方法について教えてください。
  • VisualStudio 2010 C#フォームアプリケーションで、キーワード検索プログラムを作成しています。リターンキーが押される度に候補を順にスクロールしたいのですが、IMEの状態によってリターンキーの動作を制御したいです。
  • IMEで漢字入力中にリターンキーが押されると、変換途中の場合もあるため、その場合には反応させたくありません。どのような方法がありますか?
回答を見る
  • ベストアンサー

C# でIME の状態を知るには?

VisualStudio 2010 C# form アプリケーションです。 テキストボックスの内容(キーワード)で検索するプログラムを作りました。リターンキーを押す度に候補に順にスクロールします。 KeyDown イベントでe.KeyCode == Keys.Return でリターンキーを拾っています。 ところでIME で漢字入力中に確定でリターンキーが押されますが、それだと変換途中の場合もある訳です。もちろんIME のボックスでのリターンキーですから、テキストボックスには飛んでこないと思っていたのですが・・・どうやらリターンキーが押されたという事でイベントが発生してしまいます。 変換途中でのリターンキーには反応させたくないのです。なにか手がありますか?

noname#133160
noname#133160

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

ヒント:http://msdn.microsoft.com/ja-jp/library/system.windows.forms.imemode%28v=vs.80%29.aspx 困ったときには、MSのページくらいは探した方がいいと思います。

参考URL:
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.imemode%28v=vs.80%29.aspx
noname#133160
質問者

お礼

ありがとうございます。 安易に回答を求めて質問してしまったのを後悔しています。やはりよく調べてから質問するべきでした。つい時間を惜しんで・・・。 改めて調査したところ、上記の動作は別の要因でした。IME での変換中のリターン押しは、テキストボックスのkeydown イベントには届いていませんでした。おかしいなぁと思っていたんです。

関連するQ&A

  • C#でKeyDownイベントが発生しない。

    VS2010 CS.NET 環境です。 Formにボタンが2個あり。ボタン1はF1キー、ボタン2はF2キーで動作するようにしています。 private void Form1_KeyDown(object sender, KeyEventArgs e) {    switch (e.KeyCode)    { case Keys.F1: this.btn1.PerformClick(); break; case Keys.F2: this.btn2.PerformClick(); break; } } ボタン1は計算処理をします。 ボタン2は別のForm2を開きます。 ボタン1はF1キーで何度でも動作しますが、ボタン2はF2キーでForm2を開いて、それを閉じて元のForm1に戻ると次のF2キーではKeyDownイベントが発生しません。 この時はF1キーもKeyDownイベントが発生しなくなります。 Form1のどこかをクリックすると、KeyDownイベントが発生するようになります。 別Formを開いて戻ってもKeyDownイベントを発生させるにはどうしたらいいでしょうか? よろしくお願いします。

  • C#で、Shift+Ctrl+Cを認識できない

    Windows10 VS2010 C# keydownイベントで、ctrl + Shift + C を取ろうとすると e.Shift、e.Controlがtrue、e.KeyCodeがKeys.ShiftKeyになってしまい ”C”を 判別できなかった。なにか認識できる方法ありませんか?

  • TextBoxで日本語変換確定の判断について

    お世話になっております。 現在、下記環境において テキストボックス内で日本語変換確定時にのみ ある処理(結構おもい処理)を行いたい考えています。 変換確定の判断として KeyUpイベントで「Return」のときとしたのですが(下記「検討中のロジック」)、 たまに「Return」を検知できないことがあり困っております。 どんな時に「Return」が抜けるのか または、回避策等ございましたら ご教示頂けないでしょうか? (TextCompositionManager は使用テキストボックスが System.Windows.Forms TextBox クラスのため使用できません) ■環境 windows7 Visual Studio 2010 言語:C#/WPF ■検討中のロジック (1)KeyDownイベントで「ProcessKey」の場合IMEフラグON (2)KeyUpイベントで「Return」かつIMEフラグONなら「変換確定!」

  • Altを使ったショートカットキー無効の方法

    いつもお世話になってます。 javascriptで、IEのショートカットキーのいくつかを無効にしているのですが、 Altと組み合わせて使うショートカットキーの無効化ができずに困ってます。 例えば、Ctrl+Iでお気に入りを開く処理の無効化はこう実現できました。 function keydown() { if(event.ctrlKey & event.keyCode == 73){ event.keyCode = 0; return false; } } document.onkeydown = keydown; ですが、Alt+Dでアドレスバー選択の無効化は以下では実現できませんでした。 function keydown() { if(event.altKey & event.keyCode == 68){ event.keyCode = 0; return false; } } document.onkeydown = keydown; どうすれば実現できるのか、教えてください。

  • TextとValueの違い?

    Access2010です。 フォームに有る数値入力のためのテキストボックスのKeyDownイベントに、入力後の値がゼロかNullか空白なら再入力させるようにコードを記述しましたがこれでは「型が一致しません」のエラーになります。 -----KeyDownイベントの内容 ここから----- Select Case Keycode Case 13 If IsNull(Me.数量.Text) Or Me.数量.Text = "" Or Me.数量.Text = 0 Then MsgBox ("数量が不正です"), vbCritical Keycode = 0 End If End Select -----KeyDownイベントの内容 ここまで----- でも、Exitイベントに同じような内容を記述した場合は希望通りの動きをします。 ※上記コードからSelectとKeycode=0を外し、TextをValueに変更。 私が何かを理解できていないのだと思いますが、何が違うのでしょう?

  • 初歩的な質問ですみません。

    初歩的な質問ですみません。 テキストボックスのフォーカスを移す処理なんですけど、 Private sub Textbox1_Keydown以下略 if e.Keycode = Keys.Enter then Textbox2.Focus End sub これだとポンと音が鳴ってしまうのですが、 音が鳴らないようにするには、どうしたらいいのでしょうか? よろしくお願いします。

  • C#のKeyDownイベント?で

    プログラムやり始めたばかりの初心者です。 電卓を作ってみようとやっているのですが、 一応ボタンを押しては動くようになりました。 キーボードからも入力できるようにKeyDownで設定したのですが 数字キー、+ - * /などは反応するのですがEnterキーだけは フォーカスされてるボタンがクリックされた状態になってしまいます。 どのようにすればよいのでしょうか? プログラムはこんな感じです! private void Form1_KeyDown(object sender, KeyEventArgs e) { switch (e.KeyCode) { case Keys.D1: case Keys.NumPad1: this.button_1.Focus(); this.button_1.PerformClick(); break; case Keys.D2: case Keys.NumPad2: this.button_2.Focus(); this.button_2.PerformClick(); break; . . . case Keys.Enter: this.button_kei.Focus(); this.button_kei.PerformClick(); break; }

  • キーイベントに関してなのですが・・・

    C#を使用しているんですが、テキストボックスをひとつ設置して、KeyDownイベントが発生した時に、同じキーが2度入力されたようにできませんか? aと入力したらテキストボックスにはaaと入力される感じです。 sendKeyメソッドを使用しようとしたら、大文字になってしまいます・・・ KeyCodeからキーボード判定はできたりしませんか? よろしければ教えてください><

  • C#: キー判定からどのようにしてもとの繰り返しへ?

    VisualStudio2005のC#を使用しております。 現在、 テキスト1行ずつ読み込み⇒行中に"★"があるとキー入力待ち ⇒Enter押す⇒{処理}⇒ 元の文章の続きを読み込み・・・ という処理を行いたいのですが、Enterをおしたらそこで止まってしまいます。どうやら、元のテキストの読み込みに戻らないようです。 private void Form1_KeyDown(object sender, KeyEventArgs e) //Enterが押されたとき、EnterKeyDownが1でキー入力待ち、2で押した、0でなにもなしです。 { if (EnterKeyDown == 1) { if (e.KeyData == Keys.Enter) { EnterKeyDown = 2; } } } すべてを載せると多いので、キー処理の部分のみですが、なにかよい方法はないでしょうか?

  • タブキー押下時のイベントをひろいたい。

    テキストボックスにフォーカスがあり、TABキーが押された時のイベントをひろいたいのですが、KeyPressもKeyDownもイベントが発生しません。 (If KeyCode = vbKeyTab Then  MsgBox "タブキー" End If  If KeyAscii = vbKeyTab Then ~ のようなコードを記述してもメッセージが表示されない) ヘルプにはKeyDownでは発生しないという記述がありますが、KeyPressではイベントがひろえるようなことが書いてあるのにひろえないので困っています。 なにかよい方法はありませんでしょうか。 わかりにくい説明で申し訳ありませんが困ってます。 宜しくお願いします。

専門家に質問してみよう