回答編集履歴

1

追記

2018/05/22 00:45

投稿

YAmaGNZ
YAmaGNZ

スコア10258

test CHANGED
@@ -9,3 +9,59 @@
9
9
  そして、```e.Cancel```をTrueにしてイベントハンドラから抜けると、フォーカスの移動が行われずにそのコントロールに留まります。
10
10
 
11
11
  ですので、前の質問でのNyafさんの回答のように、負の値の場合は```e.Cancel=True```としてやればよいかと思います。
12
+
13
+
14
+
15
+ ### 追記
16
+
17
+ validatingイベントでやるにしても、提示されているソースのようにleaveイベントでやるにしても
18
+
19
+ 同じ関数を複数のコントロールのイベントハンドラとして登録しているので、senderを利用してください。
20
+
21
+
22
+
23
+ ```VB.NET
24
+
25
+ Private Sub TextBox_textbox_leave(ByVal sender As System.Object, ByVal e As System.EventArgs)
26
+
27
+
28
+
29
+ 'senderはイベントを起こしたコントロールが格納されます。
30
+
31
+ Dim target As TextBox = CType(sender,TextBox)
32
+
33
+
34
+
35
+ If Val(target.Text) <= 0 Then           
36
+
37
+ MsgBox("0か負の値がはいっています")
38
+
39
+ 'ですので、ここでTextBox1と固定するのではなく、イベントを起こした
40
+
41
+ 'コントロールを操作すべきです。
42
+
43
+ TextBox1.BackColor = Color.Red
44
+
45
+ Else
46
+
47
+ TextBox1.BackColor = Color.White
48
+
49
+ End If
50
+
51
+
52
+
53
+ End Sub
54
+
55
+
56
+
57
+ ```
58
+
59
+
60
+
61
+ また、フォーカスの移動はFocusメソッドを使えば行えます。
62
+
63
+ ただ、空白や数字以外の文字を入力した場合などでも入力エラー判定となり、フォーカスを
64
+
65
+ 当てたら最後、正しい値を入力するまでフォーカスが外れない状態になったりするので、
66
+
67
+ その部分は考慮したほうがよろしいかと思います。