いま、テキストボックス1に入力された値が
①1〜8の場合にEnterキーを押したらテキストボックス2に移動
②9以上または0の場合にEnterキーを押したらメッセージを表示、テキストボックス1はクリア
③未入力の場合にEnterキーを押したら3を表示して、テキストボックス2へ移動
というようにしたいのですが、なぜかできません。
どなたかアドバイスをください(>_<)
問題のソースが以下のものです。よろしくお願いします。
Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
If e.KeyCode = Keys.Enter Then
If TextBox1.Text = "1" Or "2" Or "3" Or "4" Or "5" Or "6" Or "7" Or "8" Then
TextBox2.Focus()
Exit Sub
ElseIf TextBox1.Text = "9" Then
MsgBox("議案数は8議案以内です。", MsgBoxStyle.Exclamation)
TextBox1.Clear()
TextBox1.Focus()
Exit Sub
ElseIf TextBox1.Text = "0" Then
MsgBox("議案数を入力してください。", MsgBoxStyle.Exclamation)
TextBox1.Clear()
TextBox1.Focus()
Exit Sub
ElseIf Val(TextBox1.Text) = "" Then
TextBox1.Text = "3"
TextBox2.Focus()
Exit Sub
End If
End If
End Sub
タイトルは内容を表すようにつけてください。
また、機種依存文字(丸付き数字)は使用しないでください。
他の利用者が迷惑します。
質問についてですが、記述したいのは
Enterキーを押したときの処理ではありませんか?
ならば、KeyPressイベントでKeyAscii=vbKeyReturnのときに
Select Case でText1.Textの中身に対する処理を
記述すればいいのでは?
>If TextBox1.Text = "1" Or "2" Or "3" Or "4" Or "5" Or "6" Or "7" Or "8" Then
は
If TextBox1.text = "1" Or TextBox1.text = "2" Or ...............
とするか
If TextBox1.Text > "0" And TextBox1.Text < "9" Then
とします
おおー ElseIfだ。初めて見た。
Sayさんのご指摘通り Select Caseを使いましょう。ElseIfは使わないように。
で、下の要件を満たしてないですよ。
>2.9以上または0の場合に
>ElseIf TextBox1.Text = "9" Then
これだと9以上では無いですよね。
訂正
>If TextBox1.Text > "0" And TextBox1.Text < "9" Then
を
If Val(TextBox1.Text) > 0 And Val(TextBox1.Text) < 9
に
> ElseIf TextBox1.Text = "9" Then
は
ElseIf Val(TextBox1.Text) >= 9 Then
に
>ElseIf Val(TextBox1.Text) = "" Then
は
ElseIf TextBox1.Text = "" Then
に
これで仕様どおり動くはずかと.......
便乗質問させてください。
ElseIfは使わずにSelect Caseを使うようにとのことですが、
これはどのような理由からなのでしょうか。
同じ変数やプロパティ等を評価するからSelect Case の方が可読性が増すということでしょうか。
それとも、処理速度等の影響から、複数の変数等を評価する場合でも
Select Case True
Case a = 0
Case b = 0
End Select
等とした方が良いのでしょうか。