C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: データ連結テキストボックスを空白にするとカーソル移動できない


(過去ログ 13 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■3700 / inTopicNo.1)  データ連結テキストボックスを空白にするとカーソル移動できない
  
□投稿者/ まんぼう (1回)-(2007/05/19(Sat) 22:05:19)

分類:[VB.NET (Windows)] 

Accessデータベースの数値型のフィールドにバインドしたテキストボックスに値を入力後、BSキーで空白にすると
TABキーを押しても次のコントロールに移動できなくなります。再度何か数値を入力すると移動できるようになります。
(テキスト型のフィールドだと空白にしても移動できます。)
このテキストボックスにはイベントを何も作成していません。

試しにValidatingとValidatedイベントを作成してみると、Validatingイベントのみ発生するようです。
また、フォームのAutoValidateをDisableにすると空白にしてもフォーカス移動できるようになるのですが、
自分で作成したValidatingイベントまで発生しなくなるので、例えば数値の上限チェック等ができなくなります。

一体どこでフォーカス移動が弾かれているのか見当が付かず悩んでいます。
空白でも移動できるようにする方法はないものでしょうか?

引用返信 編集キー/
■3709 / inTopicNo.2)  Re[1]: データ連結テキストボックスを空白にするとカーソル移動できない
□投稿者/ J.Hashimoto (3回)-(2007/05/20(Sun) 08:52:51)
No3700 (まんぼう さん) に返信
> 一体どこでフォーカス移動が弾かれているのか見当が付かず悩んでいます。
> 空白でも移動できるようにする方法はないものでしょうか?

空白のときにフォーカスが移らないのは、空白は数値ではないからです。

> また、フォームのAutoValidateをDisableにすると空白にしてもフォーカス移動できるようになるのですが、
> 自分で作成したValidatingイベントまで発生しなくなるので、例えば数値の上限チェック等ができなくなります。

Validatingイベントは発生させたいが検証結果にかかわらずフォーカスを移したい、という場合は、
AutoValidateプロパティをAutoValidate.EnableAllowFocusChangeに設定すれば、実現可能です。
ただし、空白のままではデータソースに反映できませんので、更新前に入力の検証を行う必要があります。

入力が空白であってもフォーカスを移動可能にするのであれば、個人的には以下の仕様の方がすっきりしているように思います。
・フォーカスを失う時には入力値は検証しない。
・データソースに反映させる前に全コントロールの入力を検証する。

ValidateChildrenメソッドで、フォームの全てのコントロールのValidatingイベントを発生させることができます。
ContainerControl.ValidateChildren メソッド () (System.Windows.Forms)
http://msdn2.microsoft.com/ja-jp/library/ms158374(VS.80).aspx

暗黙の検証と明示的な検証についてはこちらが参考になるかと思います。
Windows フォームにおけるユーザー入力の検証 (Windows フォーム)
http://msdn2.microsoft.com/ja-jp/library/ms229603(VS.80).aspx

引用返信 編集キー/
■3725 / inTopicNo.3)  Re[2]: データ連結テキストボックスを空白にするとカーソル移動できない
□投稿者/ まんぼう (2回)-(2007/05/20(Sun) 20:20:36)
No3709 (J.Hashimoto さん) に返信
> 入力が空白であってもフォーカスを移動可能にするのであれば、個人的には以下の仕様の方がすっきりしているように思います。
> ・フォーカスを失う時には入力値は検証しない。
> ・データソースに反映させる前に全コントロールの入力を検証する。

私もこの仕様の方が分かりやすいと思い、AutoValidateをDisableにして、OKボタンでValidateChildrenで検証することで、入力を空白にするとフォーカスが移動しない問題を解決できました。
ご助言ありがとうございました。本当に助かりました。

ただ、Me.ValidateChildrenとした場合Me.Validateは不要になるのかがよく分かっていません。
そこでValidate関係について現在Googleで読み漁っている所です。
理解するのになかなか時間がかかりそうな雰囲気なので、とにかく先にお礼とご報告まで…。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -