昨日質問させていただいたC#初心者です。
実装の問題にぶちあたりましたので、皆さんの意見・アドバイスをいただければと思います。
環境:VC#2008
したいこと:C#のWindowsFormアプリケーションで、MDI形式。子ウィンドウが開くと子ウィンドウがもつ、
ツールバーとメニューを親のそれにマージしたい。
ただし、子ウィンドウは1つ以上あれば常に同じツールストリップ・メニューで、その設定が
開かれているすべての子ウィンドウに対して有効、といった状態。
すべての子ウィンドウが閉じた場合に限り、子ウィンドウが保持していたツールストリップ・メニューを
Revertする。
問題: 単純に手動Mergeすると、インスタンスの数だけマージされるので子ウィンドウの生成・消滅のときに
子ウィンドウの数を見てMerge/RevertMergeを調整した。しかも、上記のとおり、ツールストリップ。メニューは
開いている子ウィンドウすべてに対して有効なため、メニューをインスタンス化するとNG.
そこでメニュー・ツールストリップをprivate → public staticに変更。あわせて、thisをクラス名に変更。
もともとはデザイナで吐き出されたコードなので、デザイナで見るとクリアされてしまうため、
自作のコードのInitializeを作成し、そちらに退避。
しかし、ルーツバーアイコンがリソースを介して読み込んだものなのでロードされない。
考え: 自作の側でアイコンロードしてもいいが、最終的にメンテナンス性が悪くなる。
(デザイナとは独立して操作しないといけない、なんて見栄えが悪い。。)
かといって親側で子のメニュー・ツールストリップをもつとオブジェクト指向からずれたものになる。
(親側で子用のメニュー・ツールストリップ、そのハンドラも持つことになる!おまけに処理が煩雑。。)
一般的にこんなときはこうする、といったアイデア・提案などあればよろしくお願いします。