- ベストアンサー
【VB】or【C#】テキストボックスの動作
テキストボックス内に何か文字がある場合、Upキー、Downキーでカーソルが移動してしまいますが、この動作を無効にする方法はないでしょうか? Rightキー、Leftキーでの動作は有効にしたままで
- みんなの回答 (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 などで、自作のキー処理に飛ばすとかはどうでしょうか?
その他の回答 (2)
- kenpon24
- ベストアンサー率64% (66/102)
ごめんなさい。 今手持ちの環境ではvbaしか試せなくてキーコードにvbKeyUpとか書いてしまいました。 If KeyCode = vbKeyUp Or KeyCode = vbKeyDown Then を If KeyCode = Keys.Up Or KeyCode = Keys.Down Then にすれば動くかもしれません。 考え方はキー押下時に、押されたキーのコードを判定し、 上または下なら0にするっていう考え方です。 ヘルプでKeysを検索して調べてみて下さい。
お礼
そのコードで試したのです。 ご回答いただきありがとうございました。
- kenpon24
- ベストアンサー率64% (66/102)
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
補足
駄目みたいです。 ifのあとのkeycode指定でエラーが出ました。
お礼
完璧です。 一つ賢くなりました。本当にありがとうございました。