- PR -

LostFocus と validating の発生順

投稿者投稿内容
Tkane
会議室デビュー日: 2007/05/31
投稿数: 13
投稿日時: 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 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-05-31 10:44
そもそも LostFocus イベント (または GotFocus イベント) は 「低水準なイベント」 なので使わないでやってください。あなたが予期していないタイミングでこれらのイベントは発生します。

 ・・・ GotFocus LostFocus 低水準 イベント

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2007-05-31 10:48
そう定義されているからです。
MSDN にはどちらのイベントの解説にも発生順が明記されています。
Tkane
会議室デビュー日: 2007/05/31
投稿数: 13
投稿日時: 2007-05-31 11:08
早速回答ありがとうございます。

>じゃんぬねっとさん
>そもそも LostFocus イベント (または GotFocus イベント) は 「低水準なイベン
>ト」 なので使わないでやってください。あなたが予期していないタイミングでこれら
>のイベントは発生します。

なんとなくそんな気はしてました。
実は開発中ではなく、「保守」なのですがきっとLostFocusを使用している
画面は他にもあって、確実に
Tabで移動の場合:「Validating → LostFocus」の順でイベントが発生する。
マウスで移動  :「LostFocus → Validating」の順でイベントが発生する。
であるとわかれば、今後も対応可能なのですが、不明ということであると・・・
大変そうですね。

>Hongliangさん
>そう定義されているからです。
>MSDN にはどちらのイベントの解説にも発生順が明記されています。
MSDNをさがしてみましたが、「Validating → LostFocus」の順番の明記は
されていましたが、”マウスで移動  :「LostFocus → Validating」の順で
イベントが発生する。”の明記はされていませんでした。
私が探しきれていない可能性もありますので、明記されているページがあれば
教えていただけると幸いです。
kaki@
会議室デビュー日: 2006/05/25
投稿数: 15
投稿日時: 2007-05-31 11:31
こんにちは。

私も以前調べたことがあるので、ご参考までに。
http://msdn2.microsoft.com/ja-jp/library/86faxx0d(vs.80).aspx
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 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 に存在していないようなので英語版
Tkane
会議室デビュー日: 2007/05/31
投稿数: 13
投稿日時: 2007-05-31 11:35
>kaki@さん
>Hongliangさん

おお、見事にのっています。
ありがとうございます。

どうしてこのページを探せなかったのだろうか・・・

仕事の都合上、明確な根拠が必要でしたので助かります。


[ メッセージ編集済み 編集者: Tkane 編集日時 2007-05-31 11:37 ]
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2007-05-31 13:28
LostFocusイベントはウィンドウが非アクティブになったときも
発生するはずなので、その点大丈夫でしょうか?
その点を踏まえた上であえて使うのは問題ないと思いますが、
そうでなければLeaveイベントを使うことをお勧めします。

#保守の場合、大きく変更したくないなどの理由から
#正論を通せるとは限らないでしょうけれど、
#後々のことを考えてどちらがよいか判断した方がよいでしょう。


スキルアップ/キャリアアップ(JOB@IT)