• ベストアンサー

【VB】or【C#】テキストボックスの動作

テキストボックス内に何か文字がある場合、Upキー、Downキーでカーソルが移動してしまいますが、この動作を無効にする方法はないでしょうか? Rightキー、Leftキーでの動作は有効にしたままで

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

  • ベストアンサー
  • hotosys
  • ベストアンサー率67% (97/143)
回答No.3

vb2005(たぶん2008も)なら Private Sub TextBox1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown If (e.KeyCode = Keys.Up) Or (e.KeyCode = Keys.Down) Then e.Handled = True End If End Sub または Private Sub TextBox1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown e.Handled = (e.KeyCode = Keys.Up) Or (e.KeyCode = Keys.Down) End Sub などではどうでしょうか? 複数のテキストボックスの場合は Private Sub TextBox_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown, TextBox2.KeyDown, TextBox3.KeyDown e.Handled = (e.KeyCode = Keys.Up) Or (e.KeyCode = Keys.Down) End Sub もできます。 すごく沢山なら・・・前もって、 Private Sub myKeyUpDownCancel(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) e.Handled = (e.KeyCode = Keys.Up) Or (e.KeyCode = Keys.Down) End Sub とかいうのを用意して、 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load AddHandler TextBox1.KeyDown, AddressOf myKeyUpDownCancel AddHandler TextBox2.KeyDown, AddressOf myKeyUpDownCancel AddHandler TextBox3.KeyDown, AddressOf myKeyUpDownCancel End Sub や Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load For Each ctrl As Control In Me.Controls If TypeOf ctrl Is TextBox Then AddHandler ctrl.KeyDown, AddressOf myKeyUpDownCancel End If Next End Sub などで、自作のキー処理に飛ばすとかはどうでしょうか?

sineminna
質問者

お礼

完璧です。 一つ賢くなりました。本当にありがとうございました。

その他の回答 (2)

  • kenpon24
  • ベストアンサー率64% (66/102)
回答No.2

ごめんなさい。 今手持ちの環境ではvbaしか試せなくてキーコードにvbKeyUpとか書いてしまいました。 If KeyCode = vbKeyUp Or KeyCode = vbKeyDown Then を If KeyCode = Keys.Up Or KeyCode = Keys.Down Then にすれば動くかもしれません。 考え方はキー押下時に、押されたキーのコードを判定し、 上または下なら0にするっていう考え方です。 ヘルプでKeysを検索して調べてみて下さい。

sineminna
質問者

お礼

そのコードで試したのです。 ご回答いただきありがとうございました。

  • kenpon24
  • ベストアンサー率64% (66/102)
回答No.1

vbだったらテキストボックスのKeyDownイベントを取って、こんな感じでいけるんじゃないですか? (間違いがあったらすいません) Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = vbKeyUp Or KeyCode = vbKeyDown Then KeyCode = 0 End If End Sub

sineminna
質問者

補足

駄目みたいです。 ifのあとのkeycode指定でエラーが出ました。

関連するQ&A