- PR -

TextBox継承クラスでのOnTextChanged内でのText変更

1
投稿者投稿内容
味噌汁まんぼう
会議室デビュー日: 2008/02/27
投稿数: 14
投稿日時: 2008-03-12 17:25
いつも参考にさせていただいております。

System.Windows.Forms.TextBoxを継承したクラスを作っているのですが、
TextBox#OnTextChangedメソッド内で、Textプロパティを変更することは可能でしょうか?
Textプロパティを変更した時点で、再びTextBox#OnTextChangedメソッドがコールされて、
無限に繰り返されてしまうのですが・・・。

何かよい方法がございました、ご教授いただけると幸いです。

環境はWindowsXP,VS2005,.NET2.0、言語はC#を使っています。
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2008-03-12 18:00
引用:

TextBox#OnTextChangedメソッド内で、Textプロパティを変更することは可能でしょうか?
Textプロパティを変更した時点で、再びTextBox#OnTextChangedメソッドがコールされて、
無限に繰り返されてしまうのですが・・・。



そのとおりです。
で、それは結果論ではなくて、その処理の内容とタイミングを検討した際に出てくるものです。
結局、やりたいことは何なのかによって「そこでやるべきではない」とか「じゃぁそうするしかないね」という回答が得られると思います。

とりあえず、プロシージャ内の静的Boolean変数で再入を無視させるとか。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-03-12 18:01
引用:

味噌汁まんぼうさんの書き込み (2008-03-12 17:25) より:

System.Windows.Forms.TextBoxを継承したクラスを作っているのですが、TextBox#OnTextChangedメソッド内で、Textプロパティを変更することは可能でしょうか?
Textプロパティを変更した時点で、再びTextBox#OnTextChangedメソッドがコールされて、無限に繰り返されてしまうのですが・・・。

何かよい方法がございました、ご教授いただけると幸いです。


安易なことを言えばフラグで対応可能ではありますが、その他に下策としてリフレクションで直接書き換える、本家 Text プロパティを被せてしまうなど方法はあります。 ひとつ上策があるとすれば、仕様を見直すことだと思います。 理由は一般的にそういう実装が必要になることがないからです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
味噌汁まんぼう
会議室デビュー日: 2008/02/27
投稿数: 14
投稿日時: 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

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