- - PR -
Leave イベントが発生しない?.NETの仕様?
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-03-03 23:26
この説明では、2番目の入力は必須で、3番目は2番目の入力に従属すると考えられます。 であるなら、2番目の Validating が成功するまで、3番目は ReadOnly または Disabled にしておけば、Enter イベントでのチェックは不要と思われますが、いかがでしょう? TextBox などを拡張して、 「読み書き可能 ReadOnly = false; Enabled = true」 「読み取り専用 ReadOnly = true; Enabled = true」 「使用不可 Enabled = false」 の状態を持ったコントロールを作っておくと、便利かも。。。 (読み取り専用 ComboBox は、枠を消した TextBox に置き換える) 〆 written by Jitta@わんくま同盟 on 2006/03/03 □ Microsoft MVP for Visual Developer ASP/ASP.NET October, 2005 - September, 2006 | ||||||||||||
|
投稿日時: 2006-03-04 01:31
仕様的に許されるならば、ですね。 活性 / 非活性の初期値で活性が望ましい業務なのでしょう。 とにもかくにも、Enter イベントで判断というのは不適切ですね。 フォーカス遷移周りはかなりシビアなので、握りつぶされる恐れがあります。 先にも書いたように、活性 / 非活性どちらが初期値にしても Validating イベントあるいは、 UpdateDefaultButton メソッドをオーバーライドなどしてどうこうするのですが... # こういう Windows の仕様からはずれた業務に携わりすぎたせいか、 # こういうトリッキーな回避方法だけ詳しくなっていく... orz
んー、そんなことする必要はないっスね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-03-04 13:54
その様に指摘されるかも知れないなぁと思っていました。 実際、その手法(Disabled にする)を取る事も多いです。 私が、先に挙げた例は「入力を優先すべき項目に関しては、 即座にユーザーにその事を知らせた方が親切だと考えている」が趣旨だったんです。 オペレータをそこまで信用しないのかとか、そこまでして即座に通知する必要性があるのか、 という議論にもなりそうですが、長い事このスタイルでやってきたので、 自分ではそれが当たり前という感覚を持っていました。 初めの方に書きましたが、その様な項目は、一つの画面の中でそれ程多くはない為、 ユーザーから特にクレーム等があった事はありません。 (必須入力チェックに関して、殆どの項目は登録直前にチェックしています) ただ、ユーザビリティ的に不適切(少し厳しすぎる)かな?と感じ初めていますので、 考え方を改めた方が良さそうだと思っています。 | ||||||||||||
|
投稿日時: 2006-03-04 14:27
おっしゃる通りの様です。 他のイベントドリブン型の言語では通用していた方法だったので、 .NET の仕様上仕方ないのか?それとも不具合なのか?と疑問に思ったのですが、 Enterしておきながら、他へフォーカスを移動させるというのは、 今回のスレッドで、いろいろ考えてみたところ私自身も違和感を感じる様になりました。 また、Validationイベント内でも、移動先のコントロールを特定できるので、 今回と同様の事は、Validationイベントでも実装できました。 ただ、一つ前の書き込みと矛盾しますが、 Jittaさんに指摘された「2番目の Validating が成功するまでDisabled にしておけば」 を常にやっていれば「入力を優先すべき項目」は存在しない事になるので、 改めて考えてみると単に私の怠慢と、今までやってきた作成手法に対しての 固定観念が強かっただけの様です。 ErrorProviderで分かり易くする程度に留めて、 登録直前のチェックだけに留める方向で見直したいと思います。 | ||||||||||||
|
投稿日時: 2006-03-04 17:18
用意されているイベント自体は然るタイミングで駆動しています。 どちらかというと、.NET というより Windows メッセージの仕様上... というイメージです。 Delphi なんかでうまくいくのは流石といった感じです。 コンポーネント絡みであれば、Delphi の右に出る言語はないですね。 Java + Delphi (NCL を混ぜれば + VB もかな) な感じの、 C# を初めとする .NET CLR 系言語もかなり頑張ってるんですけどね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-03-04 21:32
普通はね。 でも、「そこから文字列をコピーしたい」とか、「Disabled だと、灰色字に銀色なので見にくい」とか、言われるんです。。。 なので、背景と文字の色を任意に指定できる TextBox などを作ったこともあります(C++ Builder 1.0)。
「人としてのオペレータ」を信用することと、「システムとしてのオペレータによる操作」を信用することは別です。オペレータの操作を信用してはいけません。 人は必ずミスをします。ミスを未然に防げるなら、徹底的に防ぐ方向で考える方が、事が起こった後で鎮火処理をするよりマシです。 [ メッセージ編集済み 編集者: Jitta 編集日時 2006-03-04 21:33 ] | ||||||||||||
|
投稿日時: 2006-03-04 22:14
「Disabled だと、灰色字に銀色なので見にくい」に関しては、もっと簡単な方法で回避できますね。 前者の「そこから文字列をコピーしたい」に関しても、 SetStyle と Key 系のメソッドをオーバーライドすることで防げます。 ですので、
とする必要はないと先読みして、 > んー、そんなことする必要はないっスね。 と書いています。 そんなこと == "TextBox に置き換える" のつもりですが、 私が想像したのは、System.Windows.Forms.TextBox そのものを、 その位置に載せて "置き換える" ということです。 ひょっとして、サブクラスである ::EditBox そのものを変えていますか? であれば、かなり高度な話なので忘れてください。(アンマネジドになりますが) この要望は結構多いので、私も経験していたり。 ただ、IsInputChar メソッド、ProcessDialogChar メソッドで、 Control 文字の割り振りをするのがかなり面倒だった記憶があります。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-03-05 01:09
inaです。
(本題から外れてしまうので、別スレッドにするか悩んだのですが....) 私の周りで.NET系を使用するプロジェクトでも、この要望※って毎回の様に言われてるみたいで、 ・コンボをdisabledにするのではなく、テキストボックスで置き換える という仕様をよくみてきました。 ※コンボを(単純に)disabledにしただけでは、見づらいし文字列をコピー出来ないので嫌、どうにかして! ですので、テキストボックスで置き換えるしか方法が無いものとばかり認識していたのですが、(やっぱりというか)出来るんですね... 早速、「その方法をみんなに教えてあげよう!」とネットで探してみたんですが、探し方が悪いようで見つけることが出来ませんでした... 検索のキーワードだけでもかまいませんので、是非ともご教示していただけないでしょうか?>じゃんぬねっと様 以上です、よろしくお願いいたします。 |