テキストボックスのキーイベントについて

このQ&Aのポイント
  • VS2005を使用して勉強中の初心者です。今、勉強を兼ねて実験的に作成しているアプリにおいて「TextBox1にフォーカスがある時エンターキーを押すことでメッセージボックス"TEST"を表示させる」ということをさせようと考えています。
  • 以下のようなイベントプロシージャによって、一応目的の動きをさせることはできましたが、この時、エンターキー押下による改行を入力させずにメッセージボックス表示のみを実行させるにはどのように書き直すべきなのでしょうか。
  • よろしくお願い致します。
回答を見る
  • ベストアンサー

テキストボックスのキーイベントについて

VS2005を使用して勉強中の初心者です。 今、勉強を兼ねて実験的に作成しているアプリにおいて 「TextBox1にフォーカスがある時 エンターキーを押すことでメッセージボックス"TEST"を表示させる」 ということをさせようと考えています。 以下のようなイベントプロシージャによって、 一応目的の動きをさせることはできましたが この時、エンターキー押下による改行を入力させずに メッセージボックス表示のみを実行させるには どのように書き直すべきなのでしょうか。 よろしくお願い致します。 Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) If e.KeyCode = Keys.Enter Then MsgBox("TEST") End If End Sub

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

KeyPressイベントも処理しないといけないようですよ Private Sub TextBox1_KeyPress(引数省略)   if e.KeyChar = Chr(13) then     e.Handler = True   end if End Sub KeyDownイベントの中で条件が成立した場合に e.Handled を Trueにしましょう if e.KeyCode = Keys.Enter then   e.Handled = True   MsgBox( "TEST" ) end if といった具合です KeyDownイベントでキーの判断をする場合 単にEnterだけが押された場合とShiftやCtrlなどと一緒に押された場合を考慮したほうがいいでしょう 現在の状態ですと CtrlやShiftを併用してもこの処理ルーチンを通ってしまいます

sasieni
質問者

お礼

早速のご回答、ありがとうございます。 教えていただいたとおりにやってみたところ、思い通りの動きをさせることができました。 加えてアドバイスをいただいたように、その他のキーと同時押しした場合も考慮して、 今後さらに改良してみようと思います。 本当にありがとうございました。

関連するQ&A

  • Ctrl + Cなど複数の入力キーの感知

    TextBoxでコピーや貼り付け機能などをつけようと思い。 以下のように書きましたが、うまくいきません。 さらに以下の書き方だと例えば、Shift + Zを押した時に Zの文字がテキストボックスに書き込まれてしまいます。 一般的にはどうやって複数のキー入力を感知するのが王道なんでしょうか? VBを勉強し始めたばかりで、わかりにくい説明で申し訳ないです。 Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown   'ctrl + Zで切り取り   If e.KeyCode = Keys.Z Then    If e.Control Then     MsgBox("aa")     TextBox1.Cut()    End If   End If End Sub

  • VB2008でPictureBoxをキーボードを使って動かしたい

    VBを始めたばかりの初心者です。 VB2008を使ってPictureBoxに取り込んだイラストをキーボードを使って自由に動かしたいと思っています。 今作ったものの問題点 1.現状、全く同時に→と↑のキーを押せば右上に動きます。  また、→キーを押してイラストが右に動いているときに、↑キーを押すと上に動きます。  これを右上に動くようにする方法が知りたいのです。 2.キーを押し続けてイラストを動かし続けようとすると、一回動いて止まってから動き続けるという風になってしまいます。  これを止まらずに動くようにしたいのです。 ちなみにこれ↓が今のソースコードです。 Public Class Form1 Private Sub form1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown If e.KeyCode = Keys.Up Then PictureBox1.Top = PictureBox1.Top - 10 End If End Sub Private Sub form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown If e.KeyCode = Keys.Down Then PictureBox1.Top = PictureBox1.Top + 10 End If End Sub Private Sub form1_KeyLeft(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown If e.KeyCode = Keys.Left Then PictureBox1.Left = PictureBox1.Left - 10 End If End Sub Private Sub form1_KeyRight(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown If e.KeyCode = Keys.Right Then PictureBox1.Left = PictureBox1.Left + 10 End If End Sub End Class これ↑を実行する場合は、デザインにPictureBoxを表示してください。PictureBoxに入れるイラストは適当なものを入れてください。 よろしくお願いします。

  • エクセルBVAのフォーム式のKeyCode~の意味がわかりません

    エクセルBVAです Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = vbKeyDown Then KeyCode = 0 End If End Sub ヘルプをみると キーを押したとき、およびキーを離したときに続いて発生します。KeyDown イベントはキーを押すと発生し、KeyUp イベントはキーを離すと発生します。 キーってenterのことですかね? なら、 If KeyCode = vbKeyDown Then KeyCode = 0 End If で、KeyCodeを0ににするってどういうことでしょうか?

  • TextBoxでEnterキーを押すと、にあるButtonを押したのと同じ効果を出す方法

    VB初心者です。 まだ、はじめたばかりなので、上手く質問を説明できませんが、よろしくお願いします。 環境はVisualBasic .net 2003です。 フォームにテキストボックス(TextBox)とボタン(Button)があります。 テキストボックス内でEnterキーを押すと、ボタン(Button)を押したのと同様の効果をだしたいのですが。 VC++6.0だと、SendMessage(WM_COMMAND , ..... のようなやり方でできたはずですが・・・ --------------------------- テキストボックスのコード Private Sub txtTest_KeyDown(ByVal sender As Object, _ ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtTest.KeyDown If (e.KeyCode = Keys.Enter) Then '★★★ここでどういうコードを書いてよいかわかりません。 End If End Sub ---------------------------- ボタンを押したときのイベントハンドラ Private Sub btnTest_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTest.Click     ボタンを押したら、このイベントハンドラを呼び出したい。     もしくは、間接的に呼び出したい。 ------- どなたか、やり方をご存知の方がいらっしゃいましたら、よろしくお願いします。

  • VB2005 TextBoxの入力制限について

    はじめて質問させていただきます。 現在、VB2005を使ってプログラムを組んでいるのですが、半角カタカナだけをTextBoxに入力し、表示する方法がわかりません。 Private Sub TextBox6_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox6.KeyDown TextBox6.ImeMode = Windows.Forms.ImeMode.KatakanaHalf End Sub Private Sub TextBox6_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox6.KeyPress If (e.KeyChar < "ア"c Or e.KeyChar > "-"c) And e.KeyChar <> vbBack Then e.Handled = True End If End Sub ↑見にくいかもしれませんがコードです。 この方法ではだめなのでしょうか? 回答をお願いします

  • テキストボックスのエンターキー無効

    VB6.0について質問いたします。 テキストボックスの入力の際に改行を強制的にできないように制御したいのですが次のプログラムでは上手くいきませんでした。 Private Sub Text_KeyDown(KeyCode As Integer, Shift As Integer) If vbcode = vbKeyReturn Then Exit Sub End If End Sub エンターキーを押したとき何も実行しないようにするにはどうしたらいいですか? テキストボックスはスクロールバーを設置してMultiLine プロパティをtrueに設定しています。

  • Ctrl+vのイベントを解除

    VB2010で、データグリッドビューのグリッドにペーストさせたくありません。 Ctrl+vのイベントを解除させる方法はないでしょうか? ご存知の方おしえてください。よろしくお願いします。 Private Sub DataGridView1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DataGridView1.KeyDown If e.Control And e.KeyCode = Keys.V Then      'ココにイベント解除を入れたいです End If End Sub

  • 【VB】テキストボックスのキーハンドルについて

    はじめまして。 Visual Basic初心者でキーハンドルについて困っています。 行いたいことは、 1.テキストボックスでctrl + space キーを押す。 2.テキストの補間を行う。 です。ですが下記のプログラムをコンパイルした時、 Sub MainTextKeyDown...の行で以下のエラーがでます。 「HANDLES 句には、それを含む型または基本型の 1 つで定義された WithEvents 変数が必要です。」 実際のプログラムです。(テキストボックスは"MainText"という名前で作成してあります。) ↓ Public Partial Class MainForm Public Sub New() ' The Me.InitializeComponent call is required for Windows Forms designer support. Me.InitializeComponent() ' ' TODO : Add constructor code after InitializeComponents ' End Sub Sub MainFormLoad(sender As Object, e As EventArgs) Handles MyBase.Load Me.KeyPreview = True End Sub Sub MainTextTextChanged(sender As Object, e As System.Windows.Forms.KeyEventArgs) End Sub Sub MainTextKeyDown( sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles MainText.KeyDown If e.Control Then If e.KeyCode = Keys.Space Then ' 補間処理 End If End If End Class エラー内容は調べましたが、解決が見つかりませんでした。 まだまだ勉強したてで、単純なミスかもしれませんがよろしくお願いします。

  • MSForms.ReturnInteger

    Excel VBAで 違うSubから textbox_keypress をコールしたいのですが、 vbKeyReturnを受け渡せません。 ****************************************** Private Sub StartButton_Click() Dim KeyCode As MSForms.ReturnInteger If EngTypeStartButton.Caption = "" Then KeyCode.Value = vbKeyReturn <---ここでエラーになる。 Call TextBox_KeyDown(KeyCode, 0) End If End Sub ****************************************** 『実行エラー91 オブジェクト変数またはWithブロック変数が設定されていません』 と表示されます。 vbKeyReturnの代わりに13としても結果は同じです。 受け側のSubは以下のような始まりです。 Private Sub TextBox_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) このSubは正常に動作しています。 どなたか私の間違いを教えていただけないでしょうか? よろしくお願いいたします。

  • エクセル VBA タブストップに対する質問2

    下記の「エクセル VBA タブストップに対する質問」に書き込みした者ですが、一難去ってまた一難です。又、暗雲が漂ってきました。 条件は下記といっしょで テキストボックスが1~5まであり、テキストボックス2~4まではデータが入っています。 全てのTabStopはTrue、TabIndexは順に1~5が入っています。 テキストボックス1に何もデータを入れないで、Enterが押された場合、 テキストボックス1をアクティブにしたいのですが、下記で質問した回答で動かしても、きちんと動いてくれません。 どうかご指導よろしくお願いいたします。 Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = 13 Then 'ENTER If TextBox1.Value = "" Then TextBox1.SetFocus End If End If End Sub このコードでテキストボックス1に何も入れずにEnterを押すとテキストボックス2がアクティブになってしまいます。