- - PR -
LostFocus と validating の発生順
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-05-31 09:53
VB.NET(VisualStudio2003)でWindowsアプリを開発中です。
Validatingイベントで、日付形式チェックを行うテキストボックスコンポーネント を作成し、画面で利用しています。 ある画面で、このコンポーネントを利用し、LostFocusイベントを実装 したのですが、以下の問題が発生しました。 Tabで移動の場合:「Validating → LostFocus」の順でイベントが発生する。 マウスで移動 :「LostFocus → Validating」の順でイベントが発生する。 このような事象が発生する原因について教えていただけたらと思います。 下記の解決策はあるのですが、原因を把握しておきたいと思っています。 *当画面での解決策として、LostFocusの先頭で、画面.Validate()を記述し、 Validatingを強制させることで、マウス移動時でも、 「Validating → LostFocus」の順にすることは出来ました。 [ メッセージ編集済み 編集者: Tkane 編集日時 2007-05-31 09:55 ] |
|
投稿日時: 2007-05-31 10:44
そもそも LostFocus イベント (または GotFocus イベント) は 「低水準なイベント」 なので使わないでやってください。あなたが予期していないタイミングでこれらのイベントは発生します。
・・・ GotFocus LostFocus 低水準 イベント _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
|
投稿日時: 2007-05-31 10:48
そう定義されているからです。
MSDN にはどちらのイベントの解説にも発生順が明記されています。 |
|
投稿日時: 2007-05-31 11:08
早速回答ありがとうございます。
>じゃんぬねっとさん >そもそも LostFocus イベント (または GotFocus イベント) は 「低水準なイベン >ト」 なので使わないでやってください。あなたが予期していないタイミングでこれら >のイベントは発生します。 なんとなくそんな気はしてました。 実は開発中ではなく、「保守」なのですがきっとLostFocusを使用している 画面は他にもあって、確実に Tabで移動の場合:「Validating → LostFocus」の順でイベントが発生する。 マウスで移動 :「LostFocus → Validating」の順でイベントが発生する。 であるとわかれば、今後も対応可能なのですが、不明ということであると・・・ 大変そうですね。 >Hongliangさん >そう定義されているからです。 >MSDN にはどちらのイベントの解説にも発生順が明記されています。 MSDNをさがしてみましたが、「Validating → LostFocus」の順番の明記は されていましたが、”マウスで移動 :「LostFocus → Validating」の順で イベントが発生する。”の明記はされていませんでした。 私が探しきれていない可能性もありますので、明記されているページがあれば 教えていただけると幸いです。 |
|
投稿日時: 2007-05-31 11:31
こんにちは。
私も以前調べたことがあるので、ご参考までに。 http://msdn2.microsoft.com/ja-jp/library/86faxx0d(vs.80).aspx |
|
投稿日時: 2007-05-31 11:34
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.control.lostfocus(VS.80).aspx
http://msdn2.microsoft.com/en-us/library/system.windows.forms.control.lostfocus(vs.71).aspx // .NET 1.1 日本語版は Web に存在していないようなので英語版 |
|
投稿日時: 2007-05-31 11:35
>kaki@さん
>Hongliangさん おお、見事にのっています。 ありがとうございます。 どうしてこのページを探せなかったのだろうか・・・ 仕事の都合上、明確な根拠が必要でしたので助かります。 [ メッセージ編集済み 編集者: Tkane 編集日時 2007-05-31 11:37 ] |
|
投稿日時: 2007-05-31 13:28
LostFocusイベントはウィンドウが非アクティブになったときも
発生するはずなので、その点大丈夫でしょうか? その点を踏まえた上であえて使うのは問題ないと思いますが、 そうでなければLeaveイベントを使うことをお勧めします。 #保守の場合、大きく変更したくないなどの理由から #正論を通せるとは限らないでしょうけれど、 #後々のことを考えてどちらがよいか判断した方がよいでしょう。 |