- - PR -
テキストボックスでのtabキーEnterキーの扱いについて
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-09-14 09:45
C#で開発中です。
フォーム内でのキーイベントの扱いについて教えてください。 テキストボックスで何かコードを入力してEnterキーまたはTabキーが押されたら何らかの処理をして次のTab設定されている項目に移動したいのですがうまくいきません。 ソースは private void CODE1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { switch(e.KeyCode.ToString()){ case "Enter": case "Tab": M10FormSet(CODE1.Text); break; } ・・・以下省略 こんな感じで、keyDowneイベントでkeyCodeを判定しているのですが、EnterはうまくうごくのですがTabがとれません。書き方がいけないのでしょうか?イベントの発生タイミングがよくわからないのです。初歩的な質問ですみませんがどなたか教えてください。 | ||||||||
|
投稿日時: 2004-09-14 10:05
書き方がよくないです。 ToString() は余分です。
あと、Form.ProcessTabKey() について調べてみた方がいいかもしれません。 _________________ // 渋木宏明 (Hiroaki SHIBUKI) // http://hidori.jp/ // Microsoft MVP for Visual C# // // @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/ | ||||||||
|
投稿日時: 2004-09-14 10:17
Control.IsInputKey()でtrueを返せばTabもKeyDownを受けられるかも。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=13631&forum=7 | ||||||||
|
投稿日時: 2004-09-14 10:56
渋木さん、一郎さん ありがとうございます。さっそくためしてみます!
| ||||||||
|
投稿日時: 2004-09-14 12:03
早速やってみたのですが・・・
protected override bool IsInputKey(Keys keyData) { if(keyData == Keys.Enter || keyData == Keys.Tab) return true; else return false; } と書いて、CODE1_KeyDown(keyUpでも書いてみました)で if(IsInputKey(e.KeyData)) ←(e.KeyCode) 処理・・・ で処理してみましたが、Enterはとれるのですが、Tabはやはり取れませんでした。 (メッセージを表示して確認しました) ソースを書くイベントの場所がわるいのでしょうか? それともなにかとっても勘違いしているのでしょうか? 渋木さんに書いていただいたやり方でもやはりTabはとれませんでした。 画面上では、たとえば 3 といれてTabを押すと 何の処理もせず、つぎのタブ位置にとんでいってしまいます。コントロールが離れるLeaveの時にkeyCodeがとれないかと思ってかいてみましたが、Keyイベントは発生しないですもんね。。とれませんでした。 うーーー。どーしたらいいですかね(; | ||||||||
|
投稿日時: 2004-09-14 13:57
え〜っとですね・・・・・・
私の示したリンク先をもう一度読んでみてください。 [ メッセージ編集済み 編集者: 一郎 編集日時 2004-09-14 13:58 ] | ||||||||
|
投稿日時: 2004-09-14 14:08
やり方が間違ってます。IsInputKeyをオーバーライドするのは、コントロール側でありフォームではありません。これを使おうとするのであれば、既存のコントロールを継承したカスタムコントロールを作成する必要があります。
しかしこの方法だとカスタムコントロール作らなくちゃいけないので、ちと面倒です。 代案としては、フォーカスが移動する前に何らかの処理を行いたいのであれば、Validatingイベントを利用されてはどうでしょうか。このイベントはフォーカスが移動する直前に発生します。 またEnterは拾えるので、Enterで次のフィールドに進みたいのであれば、次のうちどれかのメソッドを呼び出せば実現できるかと。 SendKeys.Send("{TAB}") ProcessTabKeyメソッド SelectNextControlメソッド | ||||||||
|
投稿日時: 2004-09-14 15:38
みなさんいろいろありがとうございます。
まだ打ち合わせ中なので終わりしだいやってみます。 |