- - PR -
TextBoxのLeaveイベントに影響せず、ボタンのClickイベントとFormのKeyDownイベントを同処理として扱いたい
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-01-14 15:06
初めて投稿させて頂きます。
いつも大変お世話になっております。 早速質問させて頂きます。 Windowsアプリケーションですが、Form上に DBのプライマリーキーを表す登録コード(TextBox)1つと 登録や削除・終了処理を行うボタン(CommandButton)などを複数配置し、 登録コードに記述された内容をLeaveイベントでDBへ参照し、 内容を表示(上記以外のコントロール)する仕様にしています。 その時、DBに該当する情報がなければエラーとし、 フォーカスを戻す処理を行っています。 ボタンはFunctionKeyでもボタンのClickイベントと同様の処理を 行うようにしています。 そこで問題なのですが、 登録ボタン押下時は、画面全体のエラーチェックを行い、Msgを表示しますが、 登録コードにフォーカスがある状態でマウスクリックを行うと 登録コードのLeaveイベントが発生し、登録コードのエラーチェックを行うのに対し、 FunctionKey押下時の登録処理では、登録コードのエラーチェックを行わず、 全体のエラーMsgを表示してしまいます。 つまり、LeaveイベントかClickイベントのどちらかと同じMsgを表示したいのですが、 方法が分かりません。 お手数ですが、ご教授宜しくお願いします。 また、似たような問題ですが、 登録コードにフォーカスがある状態で終了ボタン押下時すると、 登録コードのエラーチェックが発生してしまいます。 併せてご教授頂けると幸いです。 既出でしたら申し訳ございません。 以上です。宜しくお願い致します。 [ メッセージ編集済み 編集者: さとし 編集日時 2007-01-14 15:07 ] | ||||||||||||||||
|
投稿日時: 2007-01-14 17:10
Leave イベントに検証を実装すること自体が間違っていると思います。 その名のとおりである Validating イベントを使いましょう。
これは、正しい動作です。 つまり、単に実装が悪いだけだと思います。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2007-01-15 14:18
じゃんぬねっとさん、ありがとうございます。
Leaveイベントについては見直してみたいと思います。 度々申し訳ありませんが、もう1つ質問させて下さい。 今回の問題は「実装が悪い」とのことですが、 一般的には今回のような画面はどのようなイベント(実装)を 利用すると良いのでしょうか。 ・TextBoxでプライマリーキーのようなコードを扱う。 ・複数のボタンを配置し、マウスクリックでの押下、FunctionKey押下にも対応する。 ・終了ボタン押下時はエラーチェックは行わない。 宜しくお願い致します。 | ||||||||||||||||
|
投稿日時: 2007-01-15 16:39
| ||||||||||||||||
|
投稿日時: 2007-01-15 18:20
CausesValidationプロパティで解決しました。
ご迷惑をお掛けしました。 勉強不足で申し訳ありません。 以下が参考URLです。 http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard23.htm ありがとうございました。 また何かありましたら宜しくお願いします。 | ||||||||||||||||
|
投稿日時: 2007-01-15 18:51
Validating イベントだと、いろいろ悩ましい点がありますので、 私は、CausesValidation を考慮した MyValidating イベントを使っています。 # Kazuki さん、いつもフォローありがとうございます。(*_ _) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2007-01-15 21:53
どこで文が切れるのか、わからないよ。 登録や削除、終了処理を行う、CommandButton 等を複数配置する、というのが、よく解りませんね。「登録」や「削除」という処理を行うボタンが、それぞれ複数あるのか、それとも、「登録」「削除」「終了」と、処理が複数あって、それぞれにボタンがあるのか、いったいどっちでしょう? ↑ で、句点「。」を付けないと、どこがどこに係っているのか、よく解らないです。 句点を付けると、こうなる。 ↓ 「登録」や「削除」という処理を行うボタンが、それぞれ複数あるのでしょうか。 あるいは、「登録」や「削除」など、処理が複数あって、それぞれにボタンがあるのでしょうか。
ここもわかりにくい。 FunctionKey というのは、[F1] とか [F2] とかのファンクションキー?で、それを、Form の KeyPreview で見て、同じ処理が実行されるようにしているということ?こっちは解決したの?
[終了]ボタンにフォーカスが移るため、[登録コード]入力エリアからフォーカスが離れるため、ですよね?何か問題でも?
ええ、こういう文言を入れなければ、伝わらないのですよ。 Validating イベントを使うなら、[終了]ボタンは CausesValidating プロパティを false にする。かつ、Closing イベントで、適切に処置する(フォームの[×]をクリック)。 _________________ |
1