- - PR -
ToolStripContainer上のコントロールのCuasesValidation
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-04-03 21:29
ん。。。CausesValidation が true のコントロールにフォーカスが移動した場合、すべてのコントロールの Validating が実行されるようですね。Validating イベントなどの説明にあるイベントの発生順から、Leave の発生したコントロールの Validating イベントだけが発生するのだと思いこんでいた。。。
ただ、私のところ(VS2005 C#)で試した限りでは、
という状況は、確認できませんでした。と思ったら、Form.Close しているからなのか。それは思い至らなかった。 Form.CausesValidation を false にしても、Form にフォーカスが移るような処理で Validating が走るのは仕様です。これ、VS2005 のベータでフィードバックしました→CausesValidation を false にした時の動作について<microsoft.com>
Button イベントの処理で、Form.Close の前に AutoValidate を変更すればいいのでは?
え???それだと、どんな場合も検証しないような気がしますけど? | ||||||||||||||||
|
投稿日時: 2008-04-03 22:39
Jittaさん
書き込みありがとうございます。
いえ、Validatingイベントが実行されているのは、 Leave の発生したコントロールだけです。
できました! Button2 イベントの処理を下記のようにしたところ、 TextBoxのValidatingイベント発生することなく、フォームを閉じることができました。 AutoValidate = AutoValidate.Disable Me.Close() なるほど。こういう方法もあるのですね。 勉強になります。
ToolStripContainer上にButton1(保存)とButton2(中止)があり、 Button1は、CausesValidation=Trueになっているので 検証ルーチンを抜けずにチェック処理が行われます。 Button2は、CausesValidation=Falseになっているので 検証ルーチンを通らずに抜けます。 最初の If ActiveControl.CausesValidation = False Then だと、この場合の ActiveControl は、ToolStripContainer になり、 ToolStripContainer は、CausesValidation=True になっているので ToolStripContainer上のどのButtonをクリックしても、 検証ルーチンを通っていました。 それを、 If ToolStripContainer.ActiveControl.CausesValidation = False Then と、変えたところ、ToolStripContainerの中で、Active になっている コントロールの CausesValidation を参照できるようになったので、 私のしたいことが実現できるようになりました。 ここにたどりつくまでに、 貴重な時間を割いて、色々な事を教えてくださった Jittaさん、ガルマ・ザビさん 本当にありがとうございました。 |