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が最後に動作します。
クリックをしてもエラーが出ないようにしたいのですが
原因がわからないため、質問させて戴きました。
宜しくお願い致します。
簡単な話だと思いますが・・・
この場合、MsgBoxを表示した段階で実際には、TextBox1に対し
フォーカスがMsgBoxに移動してしまいLostForcus(Leave)イベ
ントが発生してしまいます。
ので、出続けますよネ!
フォーカスをロストした段階ではなく、次の何等かのコントロ
ールが、フォーカスをGotFocus(Enter)した段階で、TextBox1
の中身をチェックして・・・
とロジックを変更すればよいのではないでしょうか?
以上。参考まで
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
返信遅くなり申し訳ございません。
オショウさん、太郎冠者 さんありがとうございます。
太郎冠者さんのソースを参考にさせて頂きます。
NumericUpDown でまた何かありましたら、
聞くかもしれませんので宜しくお願いします。