質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

17246閲覧

入力チェック(leaveを使用しての)

yuusaku0325

総合スコア8

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2018/05/21 10:06

TextBoxが10個あり0か負の値を入力時にTextBoxの背景が赤色になり、更に0か負の値が入力された
TextBoxにフォーカスが移動するように作りたいのですが、うまく行きません。
下記のコードのどこをいじればいいでしょうか?

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
For Each ctl As Control In Me.Controls
If TypeOf ctl Is TextBox Then
AddHandler CType(ctl, TextBox).Click, AddressOf TextBox_textbox_leave
End If
Next

Private Sub TextBox_textbox_leave(ByVal sender As System.Object, ByVal e As System.EventArgs)

If Val(CType(sender,TextBox).Text) <= 0 Then            MsgBox("0か負の値がはいっています") TextBox1.BackColor = Color.Red          Else TextBox1.BackColor = Color.White          End If End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

前の質問でNyafさんが回答されたようにValidatingイベントを使いましょう。
このイベントはフォーカスが離れる時に、値を検証すべきタイミングで発生します。
ですので、入力された値の検証はこのイベントで行うべきです。

そして、e.CancelをTrueにしてイベントハンドラから抜けると、フォーカスの移動が行われずにそのコントロールに留まります。
ですので、前の質問でのNyafさんの回答のように、負の値の場合はe.Cancel=Trueとしてやればよいかと思います。

追記

validatingイベントでやるにしても、提示されているソースのようにleaveイベントでやるにしても
同じ関数を複数のコントロールのイベントハンドラとして登録しているので、senderを利用してください。

VB.NET

1Private Sub TextBox_textbox_leave(ByVal sender As System.Object, ByVal e As System.EventArgs) 2 3 'senderはイベントを起こしたコントロールが格納されます。 4 Dim target As TextBox = CType(sender,TextBox) 5 6 If Val(target.Text) <= 0 Then            7 MsgBox("0か負の値がはいっています") 8 'ですので、ここでTextBox1と固定するのではなく、イベントを起こした 9 'コントロールを操作すべきです。 10 TextBox1.BackColor = Color.Red 11 Else 12 TextBox1.BackColor = Color.White 13 End If 14 15End Sub 16

また、フォーカスの移動はFocusメソッドを使えば行えます。
ただ、空白や数字以外の文字を入力した場合などでも入力エラー判定となり、フォーカスを
当てたら最後、正しい値を入力するまでフォーカスが外れない状態になったりするので、
その部分は考慮したほうがよろしいかと思います。

投稿2018/05/21 10:23

編集2018/05/22 00:45
YAmaGNZ

総合スコア10251

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問