- 締切済み
テキストコントロールなどが変更されたかを知りたい
一般のアプリケーションにあるような、終了時に内容が変更されていたら、保存するかどうか問い合わせるようなコードを考えています。 現在は、フォームに存在するテキストコントロールなどの内容をすべて配列に読み込んでおいて、終了時にその内容を比較し、変更されていれば、メッセージボックスを出すようにしています。 コントロールが少数ならばそのままでもいいかな?と思ったのですが、多くなってくると配列も大きくなりがちです。 ということで、フォームにあるコントロールの内容が変更された場合を簡単に知る方法を模索中です。なにか良い方法はないでしょうか。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
対象となるテキストコントロールのどれかに、Textの変化が起こったとき(Changeイベントなどで捉え)、どのテキストであっても、例えばDirtyとなずけた1つの変数(機能はフラグ)に"Y"とセットするようにはできないですか。多数のコントロールに対するイベントの捕捉は、コントロール配列やクラス化で行うとか。 Form表示の初期には、もちろんDirty="N"にする。 似た発想の参考 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=29599&forum=7
- pbforce
- ベストアンサー率22% (379/1719)
Each For ~ In ~ Next で対応すればよいでしょう。コントロールが増えても面倒だということにはなりません。
補足
お返事ありがとうございます。 Each For を使う手もありますね。 Each forを使うか、Changeイベントでフラグを立てるか・・・ どちらも試してみます。
- bin-chan
- ベストアンサー率33% (1403/4213)
テキストボックスそのものを配列宣言していけば、ループ処理でOKかと。 Form1!TextBox(0).Text Form1!TextBox(1).Text のような宣言でよいのでは?
補足
お返事ありがとうございます。 そうですね、VB6ならフォームデザインで配列にできますよね。 でもVB2005は、それもめんどくさいんですよね。
- pbforce
- ベストアンサー率22% (379/1719)
フォームのロード時や保存時に.Textの内容を.Tagに保存して、終了時に比較するようにすればいいのでは?
補足
早速のお返事ありがとうございます。 そうですね・・・tagに内容を持たせるのも1つの方法ですよね。 いちおう、それも考えては見たのですが、コントロールが多くなるとめんどくさいですよね^^; ほかにもなにか良い方法はないものでしょうか・・・
補足
お返事ありがとうございます。 Changeイベントも考えてみました。 お返事いただいた皆様に今になって申し訳ないですが、開発環境はVB2005です。当初記載し忘れました。すみません。 コントロールの配列は、VB6の時と違って関連付けなどが結構面倒ですよね・・・・ 皆さんのご意見を参考にして、一番簡単なコードを書いてみます。