teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2018/05/22 00:45

投稿

YAmaGNZ
YAmaGNZ

スコア10623

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