- PR -

ValidatingイベントとボタンのCausesValidationについて

1
投稿者投稿内容
fuji
会議室デビュー日: 2004/07/14
投稿数: 12
投稿日時: 2005-06-13 18:23
VB.NETで開発しています。

@TextBoxAのValidatingイベント内で入力チェック
ATextBoxBのValidatingイベント内で入力チェック
BButtonA(CausesValidation=False)

TextBoxAにフォーカスがある状態で、ボタンのクリックを行うと
TextBoxAのValidatingイベントは発生しないのですが、
このボタンの次にTextBoxBにフォーカスが移動した場合に
TextBoxAのValidatingイベントが発生してしまいます。

どうしてこのような現象になるのか、
原因がまったく想像できません。
同じような現象を体験されている方や、この現象の原因がお分かりになる方が
いらっしゃいましたら、教えていただけませんでしょうか?

よろしくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-06-13 18:40
引用:

どうしてこのような現象になるのか、
原因がまったく想像できません。


え? 仕様だと思いますよ。
CausesValidation が false であるコントロールをいくつ渡り歩いても、
CausesValidation が true のコントロールにフォーカスが移った時点で、
渡り歩く前のコントロールの Validating イベントが発生するのは。



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
fuji
会議室デビュー日: 2004/07/14
投稿数: 12
投稿日時: 2005-06-13 18:56
じゃんぬねっとさん、ありがとうございます。

引用:

じゃんぬねっとさんの書き込み (2005-06-13 18:40) より:
引用:

どうしてこのような現象になるのか、
原因がまったく想像できません。


え? 仕様だと思いますよ。
CausesValidation が false であるコントロールをいくつ渡り歩いても、
CausesValidation が true のコントロールにフォーカスが移った時点で、
渡り歩く前のコントロールの Validating イベントが発生するのは。



仕様だったのですか。
恥ずかしいことに、まったく知りませんでした。
申し訳ありません。

いったんCausesValidation=Falseのコントロールにフォーカスが移った後は、
次にどのコントロールに移っても、最初のValidatingイベントは発生して
ほしくないのですが、
どのように制御するものなのでしょうか?

教えていただければありがたいと思います。
よろしくお願いします。
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2005-06-13 20:25
自分も昔 VB で勘違いしてたなあ(恥ずかしい)。CausesValidation = false って自コンポーネントでの検査イベント発生を抑制すると思いがちだけど、他コンポーネントで検査イベントを発生させずに、自コンポーネントにフォーカス移動可能にする機能なんだよね。

とりあえず、ButtonA の CausesValidation を true にしておいて、ButtonA がフォーカスを得たら CausesValidation = false にして、ButtonA がフォーカスを失ったら、また CausesValidation = true にするってんじゃ駄目だろうか。

[ メッセージ編集済み 編集者: 未記入 編集日時 2005-06-13 20:27 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-06-13 20:26
こんにちは、じゃんぬ です。

引用:

いったんCausesValidation=Falseのコントロールにフォーカスが移った後は、
次にどのコントロールに移っても、最初のValidatingイベントは発生して
ほしくないのですが、
どのように制御するものなのでしょうか?


CausesValidation は全部 true にしておいて、
If Not Me.ActiveControl Is 検証イベントが起こって欲しくないコントロール Then
  '/ 検証イベント
End If

とかにすれば、逃がしてはやれます。
または、CausesValidation が false なコントロールに移った時点で、
フラグを設けるしかないのかな...



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
fuji
会議室デビュー日: 2004/07/14
投稿数: 12
投稿日時: 2005-06-14 10:29
未記入さん、じゃんぬねっとさん、返答ありがとうございます。

今回は、Validatingイベントの中で
ActiveControlを判定する方法でやってみようと思います。

大変参考になりました。
ありがとうございました。
1

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