- - PR -
ユーザの入力からのみに制限を加えたい
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-04-13 23:20
テキストボックスに入力の制限を加える機能を作っています。
テキストボックスのTextChangedイベントで入力項目をチェックしているのですが、 ユーザからの入力だけでなく、 textbox1.text = "hogehoge" の処理にもTextChangedイベントは発生してしまいます。 チェックはユーザからの入力の時のみ、させたいのです。 なにか、スマートな手段をご存知の方はおられませんでしょうか。 | ||||
|
投稿日時: 2004-04-14 00:18
こんばんは。
スマートかどうかはわかりませんが、 素直にフラグかな〜 あと、TextChanged以外のイベントも検討してみてどうでしょうか? TextChangedでやるのが仕様なら別ですが。 _________________ | ||||
|
投稿日時: 2004-04-14 00:38
一行入力だけでいいのでしたら
スマート、というより荒技になってしまうのですが、次のような方法があります。 まず、テキストボックスではなくコンボボックスを使って、 DropDownStyleをSimpleに設定します。すると、外見はテキストボックスの 一行表示と同じになります。 そして、コード上から表示されている値を変更する場合はTextプロパティを変更 するのではなく、コンボボックスのAccessibilityObjectオブジェクトのValueプロパティ を変更します。すると、コード上からの変更はTextChangedイベントを発生させません。 ただ、通常はフラグを立てた方がラクだと思います。 | ||||
|
投稿日時: 2004-04-14 09:56
回答ありがとうございます。
質問が普遍的になるように 「テキストボックス」オブジェクトと書きましたが、 実はGrapeCityのInputMANにある、「date」や「mask」オブジェクトを使っています。 ちゃんと説明せず、申し訳ありません。 フラグは自分以外の人がソースに手をつけることを考えると、 可能な限りいれたくないところです。 他のイベントで入力チェックができないか、もうちょっとあがいてみます。 | ||||
|
投稿日時: 2004-04-14 10:28
パッと思いつくもので、GUIからユーザの入力ということは、そのコントロールにフォーカスがあたっているはずですから、イベントハンドラの最初に、senderがフォーカスを持っているか調べる、とか?
| ||||
|
投稿日時: 2004-04-14 11:14
回答ありがとうございます。
言われてみれば、入力中はオブジェクトにフォーカスがあたっていますね。 実際に試してみたところ、うまくいきました。 これで、共通部品だけの修正で解決できます。 ありがとうございました。 | ||||
|
投稿日時: 2004-04-14 11:18
こんにちは。
コード内で、テキストを代入のときでもフォーカスがあたっているときは 誤動作しませんかね? と、ちょっと思ったのです。私の勘違いかもしれません。 _________________ | ||||
|
投稿日時: 2004-04-14 13:18
たとえば、他のフォームの入力を代入するときは、あり得るかもしれません。が、そのときも他のフォームを表示する為の、おそらくボタンコントロールにフォーカスが移っているかな?と。まぁ、キー入力をフェッチしてフォーカスを移動させたり、フォーカスを受け取らないコントロールがあったりすると、誤動作する危険もあり得ます。この辺はマトリクス表を作ってテストするべきでしょう。 「入力値チェック」ならばバリデータ系コントロール・・・Windowsアプリでしたね。Validatingイベントで行うべきかと。また、GUI入力、PG入力にかかわらないチェックルーチンを設計するべきか、とも思います。 |