dポイントプレゼントキャンペーン実施中!

textbox1
textbox2
textbox3
があったとします。

textbox1には ロストフォーカス時にエラー処理が入っています。

登録、終了ボタンがあり、登録ではエラーではじいていいのですが、
終了ボタンの場合、エラー処理を回避(キャンセル)する方法はないでしょうか?

こんな感じで
終了.click
textbox1.lostfocus の処理をキャンセル
end

A 回答 (3件)

終了ボタンのクリックイベントよりも、


先にマウスダウンイベントを発生させれば
テキストのロストフォーカスよりも優先されるようです。
マウスのダウンアップイベントでフラグ立てて制御すれば、
擬似的に回避は可能かと思います。

Dim bcancel As Boolean
Private Sub Command1_Click()
Text1.Text = "終了処理"
End Sub

Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
bcancel = True
Call Command1_Click
End Sub

Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
bcancel = False
End Sub

Private Sub Text1_LostFocus()
If bcancel = False Then
Text1.Text = "エラー処理"
End If
End Sub
    • good
    • 0

データのチェックを Validateイベントに記述してみてはいかがでしょう


終了ボタンのCausesValidationプロパティをFalseに設定すれば終了ボタンはいつでもクリックできます
本当に終了して良いかのメッセージボックスなどを表示するなどは必要かもしれませんが …
    • good
    • 0

textbox1にFocusがある状態で、終了ボタンをクリックした場合、クリックイベントよりロストフォーカスイベントの方が先に発生します。


なので、ロストフォーカスの処理をキャンセルすることはできません。
よって、ロストフォーカスにエラー処理を書くのではなく、他のコントロールのゴットフォーカスで、textbox1のエラーチェックを行うようにしましょう。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!