- PR -

TextBoxのLeaveイベントに影響せず、ボタンのClickイベントとFormのKeyDownイベントを同処理として扱いたい

1
投稿者投稿内容
さとし
会議室デビュー日: 2007/01/14
投稿数: 3
投稿日時: 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 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-01-14 17:10
引用:

さとしさんの書き込み (2007-01-14 15:06) より:

登録コードに記述された内容をLeaveイベントでDBへ参照し、
内容を表示(上記以外のコントロール)する仕様にしています。
その時、DBに該当する情報がなければエラーとし、フォーカスを戻す処理を行っています。


Leave イベントに検証を実装すること自体が間違っていると思います。
その名のとおりである Validating イベントを使いましょう。

引用:

ボタンはFunctionKeyでもボタンのClickイベントと同様の処理を行うようにしています。
そこで問題なのですが、登録ボタン押下時は、画面全体のエラーチェックを行い、Msgを表示しますが、登録コードにフォーカスがある状態でマウスクリックを行うと登録コードのLeaveイベントが発生し、登録コードのエラーチェックを行うのに対し、FunctionKey押下時の登録処理では、登録コードのエラーチェックを行わず、全体のエラーMsgを表示してしまいます。

引用:

また、似たような問題ですが、登録コードにフォーカスがある状態で終了ボタン押下時すると、登録コードのエラーチェックが発生してしまいます。


これは、正しい動作です。
つまり、単に実装が悪いだけだと思います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
さとし
会議室デビュー日: 2007/01/14
投稿数: 3
投稿日時: 2007-01-15 14:18
じゃんぬねっとさん、ありがとうございます。
Leaveイベントについては見直してみたいと思います。

度々申し訳ありませんが、もう1つ質問させて下さい。

今回の問題は「実装が悪い」とのことですが、
一般的には今回のような画面はどのようなイベント(実装)を
利用すると良いのでしょうか。
・TextBoxでプライマリーキーのようなコードを扱う。
・複数のボタンを配置し、マウスクリックでの押下、FunctionKey押下にも対応する。
・終了ボタン押下時はエラーチェックは行わない。

宜しくお願い致します。
Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2007-01-15 16:39
引用:

一般的には今回のような画面はどのようなイベント(実装)を
利用すると良いのでしょうか。



引用:

その名のとおりである Validating イベントを使いましょう。

さとし
会議室デビュー日: 2007/01/14
投稿数: 3
投稿日時: 2007-01-15 18:20
CausesValidationプロパティで解決しました。
ご迷惑をお掛けしました。
勉強不足で申し訳ありません。

以下が参考URLです。
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard23.htm

ありがとうございました。
また何かありましたら宜しくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-01-15 18:51
引用:

さとしさんの書き込み (2007-01-15 18:20) より:

以下が参考URLです。
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard23.htm


Validating イベントだと、いろいろ悩ましい点がありますので、
私は、CausesValidation を考慮した MyValidating イベントを使っています。

# Kazuki さん、いつもフォローありがとうございます。(*_ _)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-01-15 21:53
引用:

Windowsアプリケーションですが、Form上に
DBのプライマリーキーを表す登録コード(TextBox)1つと
登録や削除・終了処理を行うボタン(CommandButton)などを複数配置し、
登録コードに記述された内容をLeaveイベントでDBへ参照し、
内容を表示(上記以外のコントロール)する仕様にしています。


 どこで文が切れるのか、わからないよ。
 登録や削除、終了処理を行う、CommandButton 等を複数配置する、というのが、よく解りませんね。「登録」や「削除」という処理を行うボタンが、それぞれ複数あるのか、それとも、「登録」「削除」「終了」と、処理が複数あって、それぞれにボタンがあるのか、いったいどっちでしょう?

で、句点「。」を付けないと、どこがどこに係っているのか、よく解らないです。
句点を付けると、こうなる。

「登録」や「削除」という処理を行うボタンが、それぞれ複数あるのでしょうか。
あるいは、「登録」や「削除」など、処理が複数あって、それぞれにボタンがあるのでしょうか。

引用:

ボタンはFunctionKeyでもボタンのClickイベントと同様の処理を
行うようにしています。


 ここもわかりにくい。
 FunctionKey というのは、[F1] とか [F2] とかのファンクションキー?で、それを、Form の KeyPreview で見て、同じ処理が実行されるようにしているということ?こっちは解決したの?

引用:

また、似たような問題ですが、
登録コードにフォーカスがある状態で終了ボタン押下時すると、
登録コードのエラーチェックが発生してしまいます。
併せてご教授頂けると幸いです。


[終了]ボタンにフォーカスが移るため、[登録コード]入力エリアからフォーカスが離れるため、ですよね?何か問題でも?

引用:

・終了ボタン押下時はエラーチェックは行わない。


ええ、こういう文言を入れなければ、伝わらないのですよ。
Validating イベントを使うなら、[終了]ボタンは CausesValidating プロパティを false にする。かつ、Closing イベントで、適切に処置する(フォームの[×]をクリック)。
_________________
1

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