- PR -

子画面から親画面を制御する方法

1
投稿者投稿内容
クゥちゃん
会議室デビュー日: 2007/07/25
投稿数: 15
投稿日時: 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
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2007-08-18 16:53
たとえばだが。イベントを起こして伝達すれば親側のフォームに伝わるよね。
クゥちゃん
会議室デビュー日: 2007/07/25
投稿数: 15
投稿日時: 2007-08-18 17:28
ぶさいくろうさん、ご返事ありがとうございます。

親側にフォームを伝える方法ですが、フォーカスを親に移してアクティブにするという方法でしょうか?
フォーカスが移動せず、上手くいきませんでした。
(実際には、デバッグで見ると親側のフォームの処理は実行出来ているのですが、親側のフォームがアクティブにもならないしDataGridが再表示されることもないです)
他に定石のような方法があったりするんでしょうか?

よろしくお願い致します。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-08-18 21:15
親が子を知り、子が親を知ると、参照が循環します。これは、よい作りではない、というのが一般的な意見です。

いま、孫が親を操作しようとすると、親から子、子から孫へと、親を伝達しなければなりません。
しかし、孫に「データが変わった」というイベントを作り、そのイベントが孫から子、子から親へと伝達するように作ってあれば、親が子、子が孫を知っているだけで用が足せます。


そのようになるように、設計してください。
_________________
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2007-08-18 21:45
引用:

クゥちゃんさんの書き込み (2007-08-18 17:28) より:
ぶさいくろうさん、ご返事ありがとうございます。

親側にフォームを伝える方法ですが、フォーカスを親に移してアクティブにするという方法でしょうか?
フォーカスが移動せず、上手くいきませんでした。
(実際には、デバッグで見ると親側のフォームの処理は実行出来ているのですが、親側のフォームがアクティブにもならないしDataGridが再表示されることもないです)
他に定石のような方法があったりするんでしょうか?

よろしくお願い致します。


そうとらえられるとは思わなかった。
親がアクティブだとかどこで受信した情報なわけ?
何はともあれ俺が言いたいのはJitta氏が言ったとおりだ。

ところで「参照が循環」という言い方をすると誤解が生じやすいか。
誤解の矛先になるであろう「循環参照」の本質的な問題とは別で設計上よくないという意味で言っていると受け止めてくれればいいが。
平たくいえば可読性や保守性を損なうという意味。
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2007-08-19 01:16
実装方法(設計)としては、Jittaさん、ぶさいくろうさんのおっしゃるとおりだと思いますので、
現状の問題点(の可能性)についてコメントします。

引用:

クゥちゃんさんの書き込み (2007-08-18 15:36) より:

親画面Formでは「テーブル情報を取得してDataGridを表示する」publicなメソッドを作成し、
孫画面から呼び出すようにしています。
親画面Formのメソッドは当然呼ばれているのですが、DataGridは再表示されませんでした。
親画面Form内のボタンクリックイベントではちゃんとDataGridは再表示されます。




孫が呼び出している親画面Formのメソッドのインスタンスが、
表示されている親画面Formとは別のインスタンスなのでは?
1

スキルアップ/キャリアアップ(JOB@IT)