• 締切済み

テキストコントロールなどが変更されたかを知りたい

一般のアプリケーションにあるような、終了時に内容が変更されていたら、保存するかどうか問い合わせるようなコードを考えています。 現在は、フォームに存在するテキストコントロールなどの内容をすべて配列に読み込んでおいて、終了時にその内容を比較し、変更されていれば、メッセージボックスを出すようにしています。 コントロールが少数ならばそのままでもいいかな?と思ったのですが、多くなってくると配列も大きくなりがちです。 ということで、フォームにあるコントロールの内容が変更された場合を簡単に知る方法を模索中です。なにか良い方法はないでしょうか。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

対象となるテキストコントロールのどれかに、Textの変化が起こったとき(Changeイベントなどで捉え)、どのテキストであっても、例えばDirtyとなずけた1つの変数(機能はフラグ)に"Y"とセットするようにはできないですか。多数のコントロールに対するイベントの捕捉は、コントロール配列やクラス化で行うとか。 Form表示の初期には、もちろんDirty="N"にする。 似た発想の参考 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=29599&forum=7

xiaolong_goo
質問者

補足

お返事ありがとうございます。 Changeイベントも考えてみました。 お返事いただいた皆様に今になって申し訳ないですが、開発環境はVB2005です。当初記載し忘れました。すみません。 コントロールの配列は、VB6の時と違って関連付けなどが結構面倒ですよね・・・・ 皆さんのご意見を参考にして、一番簡単なコードを書いてみます。

  • pbforce
  • ベストアンサー率22% (379/1719)
回答No.3

Each For ~ In ~ Next で対応すればよいでしょう。コントロールが増えても面倒だということにはなりません。

xiaolong_goo
質問者

補足

お返事ありがとうございます。 Each For を使う手もありますね。 Each forを使うか、Changeイベントでフラグを立てるか・・・ どちらも試してみます。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

テキストボックスそのものを配列宣言していけば、ループ処理でOKかと。 Form1!TextBox(0).Text Form1!TextBox(1).Text のような宣言でよいのでは?

xiaolong_goo
質問者

補足

お返事ありがとうございます。 そうですね、VB6ならフォームデザインで配列にできますよね。 でもVB2005は、それもめんどくさいんですよね。

  • pbforce
  • ベストアンサー率22% (379/1719)
回答No.1

フォームのロード時や保存時に.Textの内容を.Tagに保存して、終了時に比較するようにすればいいのでは?

xiaolong_goo
質問者

補足

早速のお返事ありがとうございます。 そうですね・・・tagに内容を持たせるのも1つの方法ですよね。 いちおう、それも考えては見たのですが、コントロールが多くなるとめんどくさいですよね^^; ほかにもなにか良い方法はないものでしょうか・・・

関連するQ&A