- - PR -
子画面から親画面を制御する方法
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-08-18 15:36
度々質問させて頂きます。
親画面(メイン)→子画面→孫画面(あるイベント時に親画面のDataGridの再表示をしたい) WindowsFormで、親画面からモードレスで子画面を表示し、子画面からモードレスで孫画面を表示したとき、 孫画面のボタンクリックイベント時に親画面と共通のテーブルを更新し親画面内のDataGridを 再表示させたいのですが、WindowsFormでは不可能なのでしょうか? ============================================================================== 親画面Formでは「テーブル情報を取得してDataGridを表示する」publicなメソッドを作成し、 孫画面から呼び出すようにしています。 親画面Formのメソッドは当然呼ばれているのですが、DataGridは再表示されませんでした。 親画面Form内のボタンクリックイベントではちゃんとDataGridは再表示されます。 ※WebFormの時は子画面を閉じる際に親画面を呼び出すようにして、PageLoad()で対応していました Microsoft Development Environment 2003 Microsoft .NET Framework 1.1 Microsoft Visual C# .NET | ||||
|
投稿日時: 2007-08-18 16:53
たとえばだが。イベントを起こして伝達すれば親側のフォームに伝わるよね。
| ||||
|
投稿日時: 2007-08-18 17:28
ぶさいくろうさん、ご返事ありがとうございます。
親側にフォームを伝える方法ですが、フォーカスを親に移してアクティブにするという方法でしょうか? フォーカスが移動せず、上手くいきませんでした。 (実際には、デバッグで見ると親側のフォームの処理は実行出来ているのですが、親側のフォームがアクティブにもならないしDataGridが再表示されることもないです) 他に定石のような方法があったりするんでしょうか? よろしくお願い致します。 | ||||
|
投稿日時: 2007-08-18 21:15
親が子を知り、子が親を知ると、参照が循環します。これは、よい作りではない、というのが一般的な意見です。
いま、孫が親を操作しようとすると、親から子、子から孫へと、親を伝達しなければなりません。 しかし、孫に「データが変わった」というイベントを作り、そのイベントが孫から子、子から親へと伝達するように作ってあれば、親が子、子が孫を知っているだけで用が足せます。 そのようになるように、設計してください。 _________________ | ||||
|
投稿日時: 2007-08-18 21:45
そうとらえられるとは思わなかった。 親がアクティブだとかどこで受信した情報なわけ? 何はともあれ俺が言いたいのはJitta氏が言ったとおりだ。 ところで「参照が循環」という言い方をすると誤解が生じやすいか。 誤解の矛先になるであろう「循環参照」の本質的な問題とは別で設計上よくないという意味で言っていると受け止めてくれればいいが。 平たくいえば可読性や保守性を損なうという意味。 | ||||
|
投稿日時: 2007-08-19 01:16
実装方法(設計)としては、Jittaさん、ぶさいくろうさんのおっしゃるとおりだと思いますので、
現状の問題点(の可能性)についてコメントします。
孫が呼び出している親画面Formのメソッドのインスタンスが、 表示されている親画面Formとは別のインスタンスなのでは? |
1