- PR -

ユーザの入力からのみに制限を加えたい

投稿者投稿内容
たっと
会議室デビュー日: 2004/04/13
投稿数: 10
投稿日時: 2004-04-13 23:20
テキストボックスに入力の制限を加える機能を作っています。

テキストボックスのTextChangedイベントで入力項目をチェックしているのですが、
ユーザからの入力だけでなく、

textbox1.text = "hogehoge"
の処理にもTextChangedイベントは発生してしまいます。

チェックはユーザからの入力の時のみ、させたいのです。

なにか、スマートな手段をご存知の方はおられませんでしょうか。

CHN
ぬし
会議室デビュー日: 2002/03/07
投稿数: 382
投稿日時: 2004-04-14 00:18
こんばんは。

スマートかどうかはわかりませんが、
素直にフラグかな〜
あと、TextChanged以外のイベントも検討してみてどうでしょうか?
TextChangedでやるのが仕様なら別ですが。

_________________
ant
常連さん
会議室デビュー日: 2004/03/24
投稿数: 44
投稿日時: 2004-04-14 00:38
一行入力だけでいいのでしたら
スマート、というより荒技になってしまうのですが、次のような方法があります。

まず、テキストボックスではなくコンボボックスを使って、
DropDownStyleをSimpleに設定します。すると、外見はテキストボックスの
一行表示と同じになります。
そして、コード上から表示されている値を変更する場合はTextプロパティを変更
するのではなく、コンボボックスのAccessibilityObjectオブジェクトのValueプロパティ
を変更します。すると、コード上からの変更はTextChangedイベントを発生させません。

ただ、通常はフラグを立てた方がラクだと思います。
たっと
会議室デビュー日: 2004/04/13
投稿数: 10
投稿日時: 2004-04-14 09:56
回答ありがとうございます。

質問が普遍的になるように
「テキストボックス」オブジェクトと書きましたが、
実はGrapeCityのInputMANにある、「date」や「mask」オブジェクトを使っています。
ちゃんと説明せず、申し訳ありません。

フラグは自分以外の人がソースに手をつけることを考えると、
可能な限りいれたくないところです。

他のイベントで入力チェックができないか、もうちょっとあがいてみます。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-14 10:28
 パッと思いつくもので、GUIからユーザの入力ということは、そのコントロールにフォーカスがあたっているはずですから、イベントハンドラの最初に、senderがフォーカスを持っているか調べる、とか?
たっと
会議室デビュー日: 2004/04/13
投稿数: 10
投稿日時: 2004-04-14 11:14
回答ありがとうございます。

言われてみれば、入力中はオブジェクトにフォーカスがあたっていますね。


実際に試してみたところ、うまくいきました。
これで、共通部品だけの修正で解決できます。

ありがとうございました。
CHN
ぬし
会議室デビュー日: 2002/03/07
投稿数: 382
投稿日時: 2004-04-14 11:18
こんにちは。

コード内で、テキストを代入のときでもフォーカスがあたっているときは
誤動作しませんかね?
と、ちょっと思ったのです。私の勘違いかもしれません。

_________________
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-14 13:18
引用:

CHNさんの書き込み (2004-04-14 11:18) より:

コード内で、テキストを代入のときでもフォーカスがあたっているときは
誤動作しませんかね?
と、ちょっと思ったのです。私の勘違いかもしれません。


 たとえば、他のフォームの入力を代入するときは、あり得るかもしれません。が、そのときも他のフォームを表示する為の、おそらくボタンコントロールにフォーカスが移っているかな?と。まぁ、キー入力をフェッチしてフォーカスを移動させたり、フォーカスを受け取らないコントロールがあったりすると、誤動作する危険もあり得ます。この辺はマトリクス表を作ってテストするべきでしょう。


 「入力値チェック」ならばバリデータ系コントロール・・・Windowsアプリでしたね。Validatingイベントで行うべきかと。また、GUI入力、PG入力にかかわらないチェックルーチンを設計するべきか、とも思います。

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