VB6.0、SP5で開発しております。
テキストボックス(txtb入力A)に符号(半角のプラスかマイナス)を入力したいのです。
しかしForm_Keydown処理にKeyCode=vbKeyAddの時に登録しますか?という
処理を書いているので、このテキストボックス(txtb入力A)に半角プラス(+)と半角マイナス(-)を入力するには、どうすればよいのでしょうか?
(ちなみに、IMEモードは、3のオフ固定にしています)
どうぞ宜しくお願い致します。
すみません。
説明の文章が変だったので訂正いたします。
↓----------------------------------------
VB6.0、SP5で開発しております。
テキストボックス(txtb入力A)に符号(半角のプラスかマイナス)を入力したいのですが、Form_Keydown処理にKeyCode=vbKeyAddの時にDB登録の処理を書いているため、テキストボックス(txtb入力A)に半角のプラス(+)を入力すると、Form_Keydown処理に記述しているDB登録の処理がはしってしまいます。
なので、これを回避して、テキストボックス(txtb入力A)に半角プラス(+)と半角マイナス(-)を入力するには、どうすればよいのでしょうか?
(ちなみに、IMEモードは、3のオフ固定にしています)
どうぞ宜しくお願い致します。
+キーを押すとDB登録する仕様なら、仕様の見直しをおすすめします。
LESIAさんへ
早速の返信ありがとうございます。
+キーを押すとDB登録する仕様というのは、
やはり処理が複雑になるので無理ということなのでしょうか?
仕様を見直しする理由をお聞かせ下さい。
宜しくお願いします。
同じく仕様の見直しをおすすめします。w
そのような仕様のアプリケーションを作るべきでは
ないと思います。
…ただ、実現の方法はあるんじゃないでしょうか?
Form_Keydown処理で ActiveControl が対象の
テキストボックスだったらDB登録の処理を
走らせなきゃいいだけでしょ?
特攻隊長まるるうさんへ
早速の返信ありがとうございます。
特攻隊長まるるうさんも仕様の変更を勧められるんですね?
上司と相談して、仕様の変更が可能であれば、変更するようにします。
無理なようであれば、ActiveControlで登録処理を回避するようにしたいと思います。
色々と勉強になりました!
特攻隊長まるるうさん、どうもありがとうございました。
----------------------------------------------------------
LESIAさんへ
仕様の変更、可能であれば考えてみます。
LESIAさん、どうもありがとうございました。
>仕様を見直しする理由をお聞かせ下さい。
一言で言えば気持ち悪いから。
ユーザインタフェースとして考えが甘い仕様だから。
ユーザの意図しないDB登録を誘発するから。
標準キー入力で、しかもその入力があることも分かって
いるのに、そのキーに別の動作を割り当てるなんて
ナンセンス。そんな設計を上司がしたなら先はない
ので転職も視野に入れておいた方がいいでしょう。
せめて補助キー([Shift], [Control], [Alt] の各キー)
と組み合わせるか、ファンクションキーを使いましょう。
特攻隊長まるるうさんへ
設計は上司の判断ではなくて、
取引先のお客様なのです。
この機能でお願いしたいという要望があったので、
仕方なくです・・・(^^;
お客様に再度仕様の変更を促してもらえるようにします。
どうもありがとうございました。
特攻隊長殿の提案もしくは、フォーカス移動ごとに「ここは+オッケー」フラグを立てておいたりする方法もあると思います。
ファンクションキーならまだしも...
一言で言うと、変だから。
現に、符号を入れたいときに困ってるじゃないですか(^^;?
+キーをおしたらDB登録という動作が直感的に判りにくいです。
また、全てのPCにテンキーがついていればいいですが、
ノートPCなどキー配列の異なるものがあったときに、
わざわざShiftキーとかを一緒に押す必要が出てくることもあります。
そうするとキー押した結果がvbKeyAddじゃなかったりしませんか?
それから、
KeyDownイベントってキー押してる間ずっと発生するじゃないですか?
そういうところでDB登録するってのは、あまり一般的で無いと思いますよ。
そういう要望が特別にその顧客から出たならともかく、その仕様では、
普通のエンドユーザ、元請、または貴殿のプロジェクトリーダーが
OKを出さないかと。
もげさん
返信、どうもありがとうございます。
顧客からの特別な要望なので、仕方がなかったのです(><;
今までこのような仕様のPGは作ったことがなかったので、
非常に困っていました。
皆様に助けられて、色々考えさせられました。
どうもありがとうございました!
> もげ さんの
フォーカス移動ごとに
「ここは+オッケー」フラグを立てておいたりする方法
が一番顧客のイメージに近いのではないのかな?
とすると、フォームのハードコピーを顧客にもっていって、
「+」押下で、DB登録される箇所、されない箇所というのを
きっちり仕様書に起こしておく必要があります。
いなさんへ
返信、どうもありがとうございます。
「ここは+オッケー」フラグにすると、
記述箇所が画面のテキストボックス等オブジェクトの数だけ必要になり、
非常に膨大な箇所になるのですが、
顧客の要望であれば、仕方ないのでしょうか?
その案も考慮してみて、その結果一番良い方法で開発したいと思います。
どうもありがとうございました。
>記述箇所が画面のテキストボックス等オブジェクトの数だけ必要になり、
>非常に膨大な箇所になるのですが、
最高で256(256は多いけど膨大?)個所かな。
その様なこともあるので、同じ種類のコントロールがたくさん有るんだったら、
配列にした方がいいな。
>顧客の要望であれば、仕方ないのでしょうか?
理不尽な仕様に関してお客さんを説得して、正しい方向に誘導するのも
プログラマのお仕事。
ごめん。しつこいけどもう一言だけ。
(そんなすぐにレス付けなくて良いよ(^^;)こーゆー掲示板での
回答は1日くらい待っても不思議じゃない(2・3日レスが無い
場合も多い)この掲示板はちょっと頑張ってるので回答が付くの
速いけど、ある程度、回答が出揃うの待って欲しいですm(__)m)
>設計は上司の判断ではなくて、
>取引先のお客様なのです。
>この機能でお願いしたいという要望があったので、
>仕方なくです・・・(^^;
同じことです。今回の仕様を上司は知っててGoサイン出した
わけでしょ?その時点でどんな不都合が出てくるか想像できない
なら使えない上司です。顧客の要望を最大限に叶えようとする
のは悪い事ではありません。しかし、実現すると問題が出てくる
場合、こちらからそれを伝え、十分に検討しておく必要があります。
で、今回のアプリが引き起こすであろう未来を書いておきます。
この程度は想像できるようになりましょう。
もげさんご指摘通り
>KeyDownイベントってキー押してる間ずっと発生するじゃないですか?
>そういうところでDB登録するってのは、あまり一般的で無いと思いますよ。
がんがん同じDB登録処理が走る可能性がありますねw。ちょっとした
キー操作ミス(小指が+キーに触れた…とか)で入力途中の不完全なデータが
ユーザの知らない間にデータベースに保存されることも有り得ます。
時間が経って何かのタイミングでデータベースのデータを使う時になって
大量の不完全なデータが検出されます。誰がこんなデータを登録したの?
って大騒ぎになりますが、誰も覚えてなく(自分が登録したことも知らないので)
大問題となります。
…で文句が開発者に回ってきます。(号泣)
それでもちゃんと修正のための予算を出してくれるならまぁ、好きな
ように作ってあげたらいいでしょうが、普通は予算が確保できなかったり…
だいたい、最初から予想できるトラブルを無駄にお金を使って実現する
必要は無いですよね?開発予算を無駄に使い、利益が出ず、修正の
為の労力ばかり掛かる…結局自分の首を締めるんですから、脳みそは
よく使っておいた方が良いですよ。
最終的にやっぱりキーイベントでDB登録処理をするとなったとして、
DB登録処理の直前にメッセージボックスを出して確認させるってのも
あります。これならユーザが OK ボタンを押さないと次に進めないので
連続実行を阻止できます。デフォルトボタンを OK ボタンにしておけば
ユーザは Enter キー押下のみで処理を進められます。ユーザの操作が
1ステップ増えますが、データベースに確実なデータのみを登録する
ためと説得すれば顧客の理解は得られるはずです。
>今までこのような仕様のPGは作ったことがなかったので、
今までにDB登録のためのPGを作成したことがあるなら、それなりの
実績もあるのでしょう?過去の仕様も顧客のいいなりですか?。ま、
それならそれでいいですが、問題が起こっていない過去の事例を参考に
すればいいでしょう。その仕様には問題が起こらないそれなりの理由が
あると思いますよ。
色々とテクニックはありますが、ここですべて上げるのも無理ですので、
他のアプリや他人の書いたコードをWEBで探して参考にするのも
良いでしょう。
>記述箇所が画面のテキストボックス等オブジェクトの数だけ必要になり、
>非常に膨大な箇所になるのですが、
共通の処理をまとめたいならそんな感じのキーワードで過去ログ検索
してみるとか…まぁ、ねろさんの提案どおり配列にしてループで同じ処理を
適用するか、過去ログ検索『AddHandler』で引っ掛かるあたりの処理か
…が一般的かな。
>顧客の要望であれば、仕方ないのでしょうか?
ってゆーかこの場合、顧客の要望ではなくプログラマの技量の問題?(^^;)
実現の方法を決めてるのはLENAさんでは?
> 記述箇所が画面のテキストボックス等
> オブジェクトの数だけ必要になり、
> 非常に膨大な箇所になるのですが、
> 顧客の要望であれば、仕方ないのでしょうか?
顧客との関係によってそこは変わってくるかと思います。
険悪な関係であれば、一度、「やる」っと言ってしまった以上
覆すのは難しいと思います。
⇒実現性を調査して、作業量を見積もれなかったのは、
残念ながらこちら側の落ち度です。
良好な関係であれば、相談に応じて貰えるのではないでしょうか?
ただし、その仕様は実現できない。だけでは流石に通らないので、
代換案を提示する必要があるかと思います。
> 理不尽な仕様に関してお客さんを説得して、
> 正しい方向に誘導するのもプログラマのお仕事。
です。自分がコーディングにするのに楽な手法に誘導するのは
プログラマ〜SEの仕事。
>自分がコーディングにするのに楽な手法に誘導するのは
>プログラマ〜SEの仕事。
おおー!これこれ、私が言いたかったのは。納得 & 感服。
そも、データーベースの更新などという堅い仕事に、KeyDown
等という、キーフックイベントを使うのは、特攻隊長まるるうさん
言われるところの『気持ち悪い』以外の何者でもない。
トラディショナルなファンクションキーを使うという方法は、
はなから選択肢に無かったのでしょうか。
ねろさんへ
配列で処理することも可能ですね。
ご指摘どうもありがとうございます!
プログラム全体の仕様がありまして、
過去のプログラムも全部、KeyDownイベントとファンクションキーで
登録処理を行っているんです・・・。
KeyDownイベントでは、コマンドボタン_Clickで発生する処理をcallしています。
今までは、テキストボックスで半角プラス(+)の入力というものがなかったので、
問題はなかったのですが、今回テキストボックスで半角プラス(+)を入力する事になって非常に困ってしまったという訳です。
1つの処理が他に影響を与えるのなら、
この仕様はマズイと提案する必要があるみたいですね。
------------------------------------
特攻隊長まるるうさんへ
初めて利用するので、レス早くてすみません(^^;
DB登録処理の直前にメッセージボックスを出して・・・というのは、
システム全体の仕様になってるので、連続登録という可能性は低いと思います。
特攻隊長まるるうさんのご指摘の通り、顧客の要望に対して
ただ実現するだけではなく、予想できる問題をきちんと考えて
ないといけないですよね?
基本的なことが分かってなくてすみません(^^;
私自身、まだPG開発を初めて約2年なので、
色んな方々のPGを参考にさせていただき、
プログラマとしての技量を向上させていきたいと思います!
--------------------------------------
いなさんへ
顧客との関係やプログラマーとしての心得について、
非常に考えさせられました。
ご指摘どうもありがとうございました!
ツイート | ![]() |