プロが教えるわが家の防犯対策術!

C#でシステム作成をしています。WindowsFormApplicationです。
どのようなシステムかと申しますと、学習システムです。

親フォームForm1には、問題ページForm2へ行くボタン、保存ボタン、開くボタンが配置されています。
問題ページForm2へ行くと、数十個の数字labelがあり、この各labelから実際の問題へ、つまり、Form3、Form4、…と行きます。
さらにForm3、Form4、…の各問題を終える度に、Form3、Form4…からその都度別Forms(集計のsとしておきます。)を開いて集計していきます。(数値を扱うので。)

Form1からForm2は同時表示、Form2のlabelからのForm3、4…はForm2をHideして表示(Hideについては後述)、Form3、4…からFormsは、もちろん3、4を参照しながら集計するので同時表示です。
Form2のHideについては、例えばForm3の問題を解き、Formsを開いて集計したなら、Form3をCloseすると、Form2を再度ShowしてForm3へのlabelのForeColorを変化させます。同時にFormsはHideします。(また次のForm4で使うため。)変色labelを再度押すと、「解答済みです」とMessageBoxに表示して行けなくなります。
このように進めていくタイプのシステムを作成しています。
以上まではうまくいきました。

ここからが問題です。
Form2のlabelの色は、Form2を閉じない限りはもちろん保持されます。しかし、閉じて再度Form1から表示すると色が保持されているプログラムを書きたいのですが、どのようにすればいいでしょうか?
ちなみにHideではだめだと思います。なぜなら、初めてこのシステムに取り掛かる際、Form1からForm2を表示する時に、HideされたForm2はまだ存在しないからです。
だからデータの受け渡し、つまり、Form2を閉じる時にForm1へデータを渡し、再度開く際にForm2へそのデータを返す、というイメージですかね。
インターネット上では、テキストボックスのテキストデータの例ばかりでしっくりきません。
渡すとしてもForm1のどこに渡すのか(どこにプログラムを?)も分かりません。
Form2から受け取る際は、Loadイベントでしょう。Form2から渡す際はClosedイベントで渡すとは思いますが…。

そしてあと一つ、Form1の保存ボタン、開くボタンのプログラムです。
学習システムで少しずつ進めていくプログラムですから、この日はここまで、と保存していく必要があります。
それを開く意味で、開くボタンも付けています。
このプログラムも難しくて分からないところですが、これも質問すると質問が多くなるため置いておきます。(というより先述の受け渡しのプログラムの質問が優先です。)
質問は、このシステムのForm1から保存することで、きちんと進度は保存されるかということです。
ある日、あるところまで問題を解き(labelの色を変え)、集計し終えたとします。
そして保存して、別の日に開くとForm1が現れます。
このForm1からForm2へ行くと、ちゃんと色が保持されたプログラムは書けるでしょうか?
(ちゃんとデータの受け渡しプログラムを書いたと想定。要はlabelの変色のみ保存できればいいのです。)
そしてFormsへ飛ぶと、データは保持されているでしょうか?
Formsは先述しましたが、集計し終えるとHideするのみです。つまりFormsは初めて表示したらもうCloseはしません。
このようにHideしたFormの状態も保持することはできるでしょうか?

A 回答 (3件)

同じような問題に同じ時期にハマる人がいるんですねぇ。


同じチームの人たちなのかも知れませんが。


とりあえず、データに関しては#2さんの書かれているようにクラスなりにまとめて、
フォーム間でのやりとりはプロパティ経由なり、受け渡し用のアクセスメソッド入れたり…でよいのではないですか?

最初に起動するであろうメインフォームのフィールドにデータを保持するクラス/構造体のインスタンスを持って、子フォームには親フォーム経由で受け渡し。
# カレンダーの例では面倒ですが個々のデータを送るしかないでしょう。

あるいは、親フォームの方にデータ受け渡し用のプロパティかアクセス用メソッドを用意して、子フォームからアクセスする。とかでしょうかね。
# カレンダーなら表示更新の際に表示に必要な情報を親フォームに問い合わせればいいし。それなら最大で31日分です。
    • good
    • 0

Formにデータを保持させるのではなくて、それらデータを統合的に扱うクラスなりを用意すればいいのでは。

    • good
    • 0

http://okwave.jp/qa/q8804320.html
これの関連じゃねーの?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています