- - PR -
TextBox継承クラスでのOnTextChanged内でのText変更
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-03-12 17:25
いつも参考にさせていただいております。
System.Windows.Forms.TextBoxを継承したクラスを作っているのですが、 TextBox#OnTextChangedメソッド内で、Textプロパティを変更することは可能でしょうか? Textプロパティを変更した時点で、再びTextBox#OnTextChangedメソッドがコールされて、 無限に繰り返されてしまうのですが・・・。 何かよい方法がございました、ご教授いただけると幸いです。 環境はWindowsXP,VS2005,.NET2.0、言語はC#を使っています。 | ||||||||
|
投稿日時: 2008-03-12 18:00
そのとおりです。 で、それは結果論ではなくて、その処理の内容とタイミングを検討した際に出てくるものです。 結局、やりたいことは何なのかによって「そこでやるべきではない」とか「じゃぁそうするしかないね」という回答が得られると思います。 とりあえず、プロシージャ内の静的Boolean変数で再入を無視させるとか。 | ||||||||
|
投稿日時: 2008-03-12 18:01
安易なことを言えばフラグで対応可能ではありますが、その他に下策としてリフレクションで直接書き換える、本家 Text プロパティを被せてしまうなど方法はあります。 ひとつ上策があるとすれば、仕様を見直すことだと思います。 理由は一般的にそういう実装が必要になることがないからです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2008-03-13 09:57
♪まどかさん
ご回答ありがとうございます。
おっしゃるとおり、やりたいことを見直せば、やる箇所を変えたり、本当にやるべき箇所を見つけることが出来るかもしれませんね。 今回はどちらかというと、やりたいことありきの質問ではなく、TextBoxの使い方としての質問としてさせていただきました。 ご教授いただいた内容は設計の際の参考にさせていただきます。 ♪じゃんぬねっとさん ご回答ありがとうございます。
ときどき、入力制限テキストボックスの実装例などで、OnTextChanged内でTextを変更している例を見かけます。 ただ、OnTextChanged内でTextを変更⇒再びOnTextChangedが呼ばれる⇒今回はTextは変更されない、という作りにすることで、 無限にOnTextChangedが呼ばれることを防いでいるものを見ました。 もしもOnTextChangedがTextを変更する必要があるとしたら、無限にTextが変更されないような仕様を考えることが必要なようですね。 p.s.ちなみに、じゃんぬねっとさんのサイトでは、入力制限テキストボックスの実装例でOnTextChangedを使用されていないことは拝見しました。。。 [ メッセージ編集済み 編集者: 味噌汁まんぼう 編集日時 2008-03-13 09:59 ] |
1