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

TreeViewとTextBox_Validatingのイベントの順序

環境/言語:[環境(WindowsXP)、使用言語(VB.NET)、.NET Frameworkのバージョン(1.1)]
分類:[.NET]

Formに、TreeViewを一つと、TextBoxをいくつかおいて、TreeViewのNodeのクリックに応じて(TreeViewのAfterSelectイベントで)、TextBoxにテキストを表示させて、TextBoxのValidatingイベントでTextBoxの内容をチェックしてテキストを保存するようなプログラムを作ったのですが、データが正常に保存できなくて調べてみたら、TextBoxのValidatingより前にTreeViewのAfterSelectイベントが発生してしまうみたいです。

ちなみにTreeViewをListBoxに置き換えてみたらこのようなことはなく正常に動作するのです。

Validatingの前に、TreeViewのAfterSelectが発生すること自体、ルール違反のような気がするのですが...
それとも私の作り方がおかしいのでしょうか?
どなたかヒントでもいいのでコメントしてくださりませんでしょうか。
■No1560に返信(ポンさんの記事)
> Validatingの前に、TreeViewのAfterSelectが発生すること自体、ルール違反のような気がするのですが...

TreeViewは、フォーカスを取得する前に、ノードに関するイベントを発生させます。
つまり、他のコントロールにフォーカスがある状態でTreeViewをクリックしたとき、
ノードを選択したり、展開・縮小を行った後にEnterイベントが発生します。
よって、他のコントロールのValidatingが発生するのはそのまた後になります。

たしかにおかしな仕様と思いますが、マイクロソフト仕様なのであきらめましょう(^^;)

BeforeSelect内でSelectメソッドを呼び出してフォーカス移動を強引に発生させたり
することが一番簡単な方法と思います。(汚いコードになりますが)
Mikeさん、ご丁寧な解説ありがとうございます。m(_ _)m

そういう仕様だったのですね、理由が理解できてすっきりしました。

ヒントもくださり感謝です。Selectメソッドを呼び出して...で何とかしてみます。
解決済み!

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