- - PR -
【VB6.0】処理内容が同じイベントを纏めて記述したい
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-09-28 11:29
いつもお世話になっております。
現在、1つのフォーム上に40個近いテキストボックスが存在する 画面をVB6.0で作成しており、その中で頭を悩ませている事がありますので 後学の為にも皆様のご意見を伺わせてください。 (テキストボックスはコントロール配列になっているものも存在します。) 行いたい事は、以下の通りです。 @全てのテキストボックスの「GotFocus」イベントで、イベントが発生した テキストボックスのバックカラーを「フォーカス取得時の色(定数)」に変更し、 入力値が存在する場合は、その文字列を選択状態とする。 A全てのテキストボックスの「LostFocus」イベントでバックカラーが 「フォーカス取得時の色(定数)」の場合は、「フォーカスが外れている時の色(定数)」 に変更する。 @・Aともに難しい処理ではないですので、フォーム上の全てのテキストボックスに対し そのイベントに対する処理を記述すれば問題ないと思うのですが、これではあまりに無駄な労力が 掛かる上に、コピペミスなどからバグを招きかねません。 以前VB.NETをやっていた時に、AddHandlerステートメントを使用してイベントとプロシージャ を結びつける事が可能だったことを思い出し、VB6.0でも同様の事が出来ないかと 試行錯誤をしてみましたがうまくいきません。 (うまくいかなくてそりゃ当然だ、などのツッコミはご勘弁下さい。) ただ、もし、 『AddHandlerステートメントを使用してイベントとプロシージャを結びつける』 ような感じで(処理事態は違えど、上記と同等にイベントのコーディング量を減らせる方法)、 処理内容が同じイベントを纏める事が出来れば、今後もとても助かります。 現在、苦肉の策として以下のようにイベントから共通プロシージャを呼んで イベントごとのコーディング量を減らしてみました。
本当は、.NETで以下のように行っていたように イベント自体を纏めてしまいたいというのが理想です。
このような事は可能でしょうか? また、このような場合、皆様はどのようにコーディングされているのでしょう? ヒントになりそうなことをご存知でしたら、ご教示下さい。 過去ログなどですでに話題になっていましたら、申し訳ありません。 長文に最後までお付き合い頂き、ありがとうございます。 宜しくお願い致します。 | ||||||||||||
|
投稿日時: 2006-09-28 12:15
ハルシオンさん、初めまして。
私は、以下のページを参考にして同様のことを行いました。 VB イベントの共有 ただ、配列になっているコントロールには難しいかもしれません。 (出来るかもしれませんが、私にはできませんでした・・・。) | ||||||||||||
|
投稿日時: 2006-09-28 12:21
ユーザーコントロールにする。要点を置き換えると標準のコントロールの機能では不足なので、コントロールの機能を拡張して独自のコントロールを作りたいと言う話ですよね。ならばユーザーコントロールを使うのが妥当でしょう。 | ||||||||||||
|
投稿日時: 2006-09-28 12:35
各 TextBox に SetWindowLong() してみてはどうでしょう?
| ||||||||||||
|
投稿日時: 2006-09-28 12:35
クラス モジュールに WithEvents を定義して、関連付けする方法をお勧めします。VB6 の後半部分が、今回の話題そのものだろうと思います。
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-09-28 17:50
皆様、迅速なご回答ありがとうございます。
APIでしょうか。 まことに恥ずかしいのですが、APIに全く明るくないので出来れば APIが絡まないことで対応できないかと考えておりました。 今後、調べてみたいと思います。 ありがとうございます。
残念ながらVB6.0で開発を行っております。 ユーザコントロール、作りたかったです。 ありがとうございます。 頂いた情報より、早速 J.J.さん、じゃんぬねっとさんに ご提示頂いた『WithEvents』を使用したクラスを作成してみました。 (じゃんぬねっとさんのページは隅々までチェックしていたつもりだったのですが 見落としていました。いつもありがとうございます。) まさにこのような事がやりたかったので「痒いところに手が届いた」と いった気持ちです。 ありがとうございました。 ただ、J.J.さんもご指摘されている通り、
今回の画面はコントロール配列を含んでいたので それを配列でなくして、とりあえず乗り切りました。 他の画面にもコントロール配列が存在しており、せっかく便利なクラスの 作り方を教えて頂いたのにこれではやっぱり色々と手を入れなくては いけなくなってしまうので、もし更にチューンアップできる事があれば 対応したいと考えております。 無いものねだりだったら大変申し訳ないのですが、コントロール配列にも 対応できるような方法は無いでしょうか? また、このような場合はどのような対処をされていますか? 宜しくお願い致します。 | ||||||||||||
|
投稿日時: 2006-09-28 18:43
僕もユーザーコントロールにしますね。VB6.0でw (作れますよん) _________________ R・田中一郎 @ わんくま同盟 - R.Tanaka.Ichiro’s Blog ←写真を載せてみた [ メッセージ編集済み 編集者: R・田中一郎 編集日時 2006-09-28 18:51 ] | ||||||||||||
|
投稿日時: 2006-09-28 18:54
試していませんが、できないと思います。 コントロール配列は、素直に Index 付きのイベント プロシージャでやると良いでしょう。 サブクラス化する方法を採ればできると思いますが、お勧めはできないですね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1|2|3
次のページへ»