NumericUpDown でエラーが出続けるのを回避するには?

解決


ひ-くん  2009-11-21 16:55:29  No: 146570  IP: 192.*.*.*

OS : winXP
開発言語  vb.net 2005

NumericUpDown  と  TextBox、ComboBoxなどのLeaveイベントでフォーカス移動とメッセージボックス表示が絡むとエラーが出続ける現象が発生します。

詳細

TextBoxとNumericUpDownだけの画面です。

Public Class Form1
    Private Sub TextBox1_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.Leave
        '正しい数値でないならエラーメッセージを出力しフォーカスをTextBox1に返す
        If TextBox1.Text <> "1234" Then
            MsgBox("違います")
            TextBox1.Focus()
        End If
    End Sub
End Class

正しくない数値だった場合、メッセージボックスを出して、フォーカスを自分のコントロールに移動させる処理になっています。

正しくない数値(1111など)を入力し、NumericUpDownの↑↓の矢印を押下した場合、エラーメッセージが出ます。エラーメッセージのOKを押します。
その後、TextBoxをマウスクリックするとエラーがクリックした回数だけ出ます。
クリックせずに数値を正しい数値を上入力して、もう一度クリックするとなぜかNumericUpDownが最後に動作します。

クリックをしてもエラーが出ないようにしたいのですが
原因がわからないため、質問させて戴きました。
宜しくお願い致します。

編集 削除
オショウ  2009-11-22 19:14:47  No: 146571  IP: 192.*.*.*

簡単な話だと思いますが・・・

この場合、MsgBoxを表示した段階で実際には、TextBox1に対し
フォーカスがMsgBoxに移動してしまいLostForcus(Leave)イベ
ントが発生してしまいます。

ので、出続けますよネ!

フォーカスをロストした段階ではなく、次の何等かのコントロ
ールが、フォーカスをGotFocus(Enter)した段階で、TextBox1
の中身をチェックして・・・

とロジックを変更すればよいのではないでしょうか?

以上。参考まで

編集 削除
太郎冠者  2009-11-22 20:34:50  No: 146572  IP: 192.*.*.*

Validatingイベントを使ってみては?
[MSDN - Control.Validating イベント]
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.validating(VS.80).aspx

こんな感じ
Private Sub TextBox1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
    '正しい数値でないならエラーメッセージを出力しフォーカス移動をキャンセル
    If TextBox1.Text <> "1234" Then
        MsgBox("違います")
        e.Cancel = True
    End If
End Sub

編集 削除
ひ-くん  2009-11-24 17:34:49  No: 146573  IP: 192.*.*.*

返信遅くなり申し訳ございません。
オショウさん、太郎冠者 さんありがとうございます。
太郎冠者さんのソースを参考にさせて頂きます。

NumericUpDown  でまた何かありましたら、
聞くかもしれませんので宜しくお願いします。

編集 削除