DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Button_Click時のLost_Focusイベントについて

環境/言語:[Windows 2000]
分類:[.NET]

どうもです。
WindowsアプリケーションをVB.netで作成しているのですが、
フォーム上にテキストボックスとボタンがあり、テキストボックスをLost_Focusする
とメッセージボックスを表示するのですが、
テキストボックスからマウス移動でボタンを押すと、ロストフォーカス時にメッセージボックスが表示され、ボタンを押された際に実行するイベントが発生しません。
発生させる方法はあるのでしょうか?ご存知の方よろしくお願いします。
■No7902に返信(ぢゅすさんの記事)
> どうもです。
> WindowsアプリケーションをVB.netで作成しているのですが、
> フォーム上にテキストボックスとボタンがあり、テキストボックスをLost_Focusする
> とメッセージボックスを表示するのですが、
> テキストボックスからマウス移動でボタンを押すと、
> ロストフォーカス時にメッセージボックスが表示され、
> ボタンを押された際に実行するイベントが発生しません。
> 発生させる方法はあるのでしょうか?ご存知の方よろしくお願いします。

VB.NETでは低水準イベントである、LostFocus イベントを使うことは推奨されていません。
LostFocusイベントと、GotFocusイベントは、VB6時代と動きが違います。

# ウィンドウが、アクティブ・非アクティブになっても発生したり。

確実に発生させるのならば、Leave イベントを使ってください。
フォーカス遷移先を確認する場合は、Validating イベントで検証すると良いでしょう。
■No7904に返信(java.lang.Nullpoさんの記事)
>
> VB.NETでは低水準イベントである、LostFocus イベントを使うことは推奨されていません。
> LostFocusイベントと、GotFocusイベントは、VB6時代と動きが違います。
>
> # ウィンドウが、アクティブ・非アクティブになっても発生したり。
>
> 確実に発生させるのならば、Leave イベントを使ってください。
> フォーカス遷移先を確認する場合は、Validating イベントで検証すると良いでしょう。

java.lang.Nullpo 様どうもありがとうございます。
Leaveイベントに変更しましたが、やはりLost_Focusと同様に、
メッセージボックスを表示すると。ButtonのClickイベントが発生しません。
またValidatingイベント内ではActiveControl(フォーカスのあるコントロール)は取得できますが、Clickされたかどうかまでは取得方法がわからないです・・・。
取得は可能なのでしょうか?
■No7905に返信(ぢゅすさんの記事)
> java.lang.Nullpo 様どうもありがとうございます。
> Leaveイベントに変更しましたが、やはりLost_Focusと同様に、
> メッセージボックスを表示すると。ButtonのClickイベントが発生しません。
> またValidatingイベント内ではActiveControl(フォーカスのあるコントロール)は取得できますが、Clickされたかどうかまでは取得方法がわからないです・・・。
> 取得は可能なのでしょうか?

java.lang.Nullpo さんの言うとおり、Leaveイベントで実現可能です。
Focusが移った後でイベントを拾えば問題ないと思います。
ソースはこんな感じですかね?
-------------------------------------------------------------------
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MessageBox.Show("Click")
End Sub
Private Sub TextBox1_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Leave
If Me.Button1.Focused = False Then
MessageBox.Show("Leave")
End If
End Sub
■No7905に返信(ぢゅすさんの記事)
> java.lang.Nullpo 様どうもありがとうございます。
> Leaveイベントに変更しましたが、やはりLost_Focusと同様に、
> メッセージボックスを表示すると。ButtonのClickイベントが発生しません。
> またValidatingイベント内ではActiveControl(フォーカスのあるコントロール)は取得できますが、Clickされたかどうかまでは取得方法がわからないです・・・。
> 取得は可能なのでしょうか?

java.lang.Nullpo さんの言うとおり、Leaveイベントで実現可能です。
Focusが移った後でイベントを拾えば問題ないと思います。
ソースはこんな感じですかね?
-------------------------------------------------------------------
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MessageBox.Show("Click")
End Sub
Private Sub TextBox1_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Leave
If Me.Button1.Focused = False Then
MessageBox.Show("Leave")
End If
End Sub
みなさまありがとうございます。
大変参考になり、なんとかできました。
ほんとうにありがとうございます。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板