• ベストアンサー

VC++ で TextBoxから、次のコントロールに移動する方法について

VC++で、フォーム上に複数のTextBoxを配置して、タブインデックスで、次に移動したいTextBoxを設定しました。 最初のTextBoxに入力した後、Tabキーで、次のコントロールに移動することはできましたが、Enterキーで次のコントロールへ移動することはできないのでしょうか? TextBoxのプロパティの設定方法とを教えて下さい。

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

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

※TextBox、フォームからC++/CLIのWindowsフォームアプリケーションと仮定します。 (環境は明記すべき) TextBoxのKeyDownイベントを追加し、以下のようなコードを記述してみてはどうでしょうか? if (e->KeyCode == Keys::Enter) {   if (!e->Control) {     this->SelectNextControl(static_cast<Control^>(sender), ! e->Shift, true, true, true);   } } ※全角空白は半角空白等に置換してください。

kouzikun
質問者

お礼

ご回答ありがとうございます。 環境を明記していないことを反省しております。 VC++2008 CLR フォームにて、プログラムしております。 chie65535さんのお礼にも書きましたが、考え方の参考になりましたので、TextBoxのイベントを利用して考えてみます。 ご回答ありがとうございました。

その他の回答 (1)

  • chie65535
  • ベストアンサー率43% (8525/19382)
回答No.1

>TextBoxのプロパティの設定方法とを教えて下さい。 プロパティでは出来ません。 TextBoxにWM_KEYDOWNイベントが来た時の処理を変更し、押されたキーがVK_ENTERだったら、押されたキーをVK_TABに変えて処理させて下さい。 具体的には、TextBoxのWndProcを以下のようにします。 LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {  if (((message == WM_KEYDOWN) || (message == WM_KEYUP)) && (wParam == VK_ENTER)) {   wParam = VK_TAB;  }  /*デフォルトのメッセージ処理ルーチン*/  return DefWindowProc(hwnd, message, wParam, lParam); }

kouzikun
質問者

お礼

ご回答ありがとうございます。 後に回答を頂いた bluecampus さんのご指摘にありました環境を明記していないことを反省しております。 現在VC++2008の CLRで、プログラミングしております。 ご回答頂いた、そのままをテストしていませんが、考え方がわかりましたので、VC++2008 CLR環境にて、どうやるか頑張ってみます。 ご回答ありがとうございました。

関連するQ&A

  • ユーザコントロールでのEnterキータブ移動

    開発言語:VS2008・C# VS2008・C#で郵便番号や電話番号を入力できるユーザコントロールを作成しています。 入力フィールドはTEXTBOX、区切り文字はLABELで、 郵便番号なら3桁 + 区切り文字(-) + 4桁 電話番号なら3桁 + 区切り文字(-) + 4桁 + 区切り文字(-) + 4桁 といった感じで、プロパティで設定された値により、動的に入力フィールドのTEXTBOXを作成しています。 上記のユーザコントロールをフォームに配置し、ENTERキーでフォーカスを移動させたいのですが、現時点で、ユーザコントロール内のTEXTBOXでENTERを押した場合フォーカスはユーザコントロール内の次のTEXTBOXに移動するのですが、最後のTEXTBOXでENTERキーを押した場合ユーザコントロールからフォーカスが移動しなくなってしまいます。 例)住所フィールド(TEXTBOX)→ENTER押下→郵便番号(ユーザコントロール)の上3桁フィールド→ENTER押下→郵便番号(ユーザコントロール)の下4桁フィールド→ENTER押下(フォーカスが次のコントロールに移動しない) ユーザコントロール内のENTERキー移動はKeyDownイベントに関連付け行っていますが、これだとユーザコントロール内しかENTERでフォーカスが移動せずフォーム上の次のコントロールにフォーカスが移動しません。 どなたか、ENTERキーでユーザコントロールからフォーカスが移動できる方法を教えてください。

  • Enterキーでもコントロール間を移動するには?

    通常はデフォルトで、コントロール間を移動するにはTABキーとなっていますが、コントロールのプロパティのTabIndexで、その移動順序を数字で指定するようになっていると思うのですが、このコントロール間を移動をEnterキーでも行えるようにしたいと思っています。 どのような方法(プロパティ設定?コード記述?)が必要となりますか? よろしくお願い致します。

  • ユーザーコントロールについて

     コマンドボタン(cmd1,cmd2,cmd3)を3つ配置したユーザーコントロール(読み取り専用)をフォーム上(form)に配置し、ロードしたとき一番初めにフォーカスがあたるのがcmd1なのですが、これをcmd2にフォーカスを与えたいのです。ユーザーコントロールのタブインデックスはコマンドボタンの名前どおりなのですが、tabキーを動かすことと同じ関数みたいなものはあるのでしょうか?

  • UserControl内の複数のTextBoxでKeyDownイベントが使えない

    VB2005の初心者です。 色々調べたつもりなのですが解らなくてよろしくお願いします。 フォームのTab移動を[Enter]きーで移動するようにしているのですが UserControlに複数のTextBoxを配置しUserControlを作成したものを、フォームに配置するとKeyDownイベントが取得できないというか、フォームに配置したTextBoxなどにフォーカスが移動してしまいます。 UserControl内のTextBoxのTabIndex順に移動させる方法などご存知の方いらっしゃいましたらご教授願えないでしょうか。 ProcessDialogKeyのオーバーライト辺りまでは調べたのですがよく解らなくてお願いします。

  • TextBoxに連続で入力する方法

    Form1に、TextBox1とTextBox2を配置しています。 TextBox1にKey入力を受け、Enter Keyで取り込む動作を、連続して行うためのプログラムを作ってみましたが、何故かEnter Keyの後、カーソルがTextBox2に移動してしまいます。Enter Keyの後、TextBox1.SetFocusで、カーソルをTextBox1にしているのですが何故が解らず困っています。Enter Kyeの後、カーソルがTextBox1に戻るようにするには、どのようにすれば良いのか教えて下さい。 PC環境は、OS=Win10 Excel=2010 です。作ったプログラムは以下の通りです。よろしくお願いします。 Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = vbKeyReturn Then Sheets("Sheet1").Range("A1") = TextBox1.Value TextBox1 = "" TextBox1.SetFocus End If End Sub

  • MultiLine=TrueのTextBoxでEnterキー

    Visual Basic 6.0で、TextBoxでEnterが押されたら次のコントロールへ移動させているのですが、 MultiLine=Trueの場合、TextBox内で改行されてから次のコントロールへ移動してしまいます。 TextBox内で改行されたくはないのですが、何か回避方法はありますか? (10文字分の幅のTextBoxに20文字入力するため、折り返しはされて欲しいのです。)

  • Excelのコントロールツールボックスでデータの入力フォームを作成しま

    Excelのコントロールツールボックスでデータの入力フォームを作成しました。内、何項目かはテキストボックスになっているのですが、これを特定の順番でTabキーかEnterキーで移動させたいのですができません。方法をご存知の方がいらっしゃれば教えてください。 VBAエディタからのフォーム作成ではプロパティでできていたのでExcel全般の仕様だと思っていたのですが・・・。

  • キーボードのtabキーとenterキーの変換

    ホームページのあるページにテキストフォームがあります。 キーボードのtabキーを押した時に、enterキーを押した時の処理を施したいと思っています。 通常tabキーを押せば次のフォームにカーソルが移動するかと思いますが、 このページではそれがenterキーとして動いてほしいと思っています。 このテキストフォームの横にはsubmitも置いており、即時にsubmit送信したいのです。 テキストフォームは一つだけです。 なぜそういうことをしたいかというと、スキャンでバーコードを読取りテキストフォームに数値を表示させます。 このスキャナーは設定でスキャンした後にtabキーをセットすることが可能で、 キーコードを確認してもスキャン後にtabキーを入力しているようでした。 しかし、tabキーではスキャン後にsubmit送信されませんので、tabキーをenterキーに変換してしまえばスキャン読み取り後即時にそのフォームが送信されるのではないかと思っています。 このスキャナーでは読み取り後にenterキーを打つという設定はあるのですが、 複数のフォームがある場合にスキャンした値を入力していくことができません。 (※別ページには複数のフォームが存在する) どうすればキーコードを変換してtabキーをenterキーに変換できるのでしょうか? ブラウザはGoogle chromeです。 OSはWINです。 その他不明点がありましたら、ご質問下さい。 よろしくお願いします。

  • Enterキーでフォームの入力フィールド移動をしたい

    フォームの入力項目間の移動を行うのに、普通はTABキーを使うよう なのですが、Enterキーで移動して、送信ボタンまで来たら、それ もEnterキーで送信という動作にしたいと思います。 しかし、入力項目のところでEnterキーを押すと、次の項目へ移動 するのではなく、送信ボタンが押されてしまいますよね? そうさせずに、上記のような動作をさせるにはどうすれば良いのでしょ うか? 同じような質問をどこかで見たような気がしたのですが、見つ けることができませんでした。よろしくお願いします。

  • VBでEnterを押すとTabで飛ぶ様にする

    お世話になります。 VB初心者です。VBでフォームを作り、TEXTBOXを複数作ると、Tabキーでタブストップの順番にカーソルが移動しますが、Enterを押すとカーソルが移動するようにするのはどうしたら良いのでしょうか? 宜しくお願いします。