トップ回答者
親フォームから切り離した子フォームを再度親フォームに接続する方法

質問
-
やりたいことは、件名の通りです。
親フォームの中で、子フォームを生成し、MdiParentをnullに設定すると、
親から独立した子フォームを作ることができますが、
その独立した子フォームを再度親に結びつけることは可能でしょうか。
独立した子フォームを検索することが出来れば、MdiParentに親フォームを設定すれば
いけそうな感じはしているのですが、甘いでしょうか。
独立した子フォームにしても、親フォームを閉じると子フォームも一緒に閉じるので
親と子はどこかに血のつながりがあると考えています。
今のところ、親と子を結びつける方法は、親側でも子側でもどちらでも良いと考えています。
親と子フォームを自由自在に脱着する方法を是非教えて下さい。
宜しくお願い致します。
回答
-
返答が遅れまして、申し訳ありません。
返信ありがとうございます。
仰る通り、メンバにフォームの配列を用意して、その配列で管理すればやりたいことが実現できました。
ありがとうございました。
アドバイス頂いた管理の方法以外に、特定のメソッドを利用して管理しなくても良い方法が無いものか
色々調べてみたのですが、Application.OpenFormsを利用すると、自アプリで開かれているフォーム(親フォーム含む)を
すべて取得できることが分かりました。
実際に組み込んでみたのですが、子フォームの切り離し有無関係なく、すべての子フォームを取得することができました。
(親フォームが含まれるので、親を除く仕組みは必要ですが)
更に、親フォームから切り離されたフォーム(MdiParent=null)に親を設定しようと試みたのですが、下記の方法だと例外が発生し、正常に処理できませんでした。
コード ブロックforeach ( Form form in Application.OpenForms )
{if( 親ウィンドウだったら)
continue;
form.MdiParent = 親フォーム;
}
原因は恐らく、ループ中にコレクションに対して変更を加えているためです。
仕方なく、OpenFormsで取得した子ウィンドウを一旦別配列に格納しておき、その後にその配列をループし、
親を設定するように変更しました。
コード ブロックFormCollection formList = new FormCollection();
foreach ( Form form in Application.OpenForms )
{
if ( 親ウィンドウだったら )
continue;formList.Add( form);
}foreach ( Form form in formList )
{
form.MdiParent = this;
}
すべての返信
-
返答が遅れまして、申し訳ありません。
返信ありがとうございます。
仰る通り、メンバにフォームの配列を用意して、その配列で管理すればやりたいことが実現できました。
ありがとうございました。
アドバイス頂いた管理の方法以外に、特定のメソッドを利用して管理しなくても良い方法が無いものか
色々調べてみたのですが、Application.OpenFormsを利用すると、自アプリで開かれているフォーム(親フォーム含む)を
すべて取得できることが分かりました。
実際に組み込んでみたのですが、子フォームの切り離し有無関係なく、すべての子フォームを取得することができました。
(親フォームが含まれるので、親を除く仕組みは必要ですが)
更に、親フォームから切り離されたフォーム(MdiParent=null)に親を設定しようと試みたのですが、下記の方法だと例外が発生し、正常に処理できませんでした。
コード ブロックforeach ( Form form in Application.OpenForms )
{if( 親ウィンドウだったら)
continue;
form.MdiParent = 親フォーム;
}
原因は恐らく、ループ中にコレクションに対して変更を加えているためです。
仕方なく、OpenFormsで取得した子ウィンドウを一旦別配列に格納しておき、その後にその配列をループし、
親を設定するように変更しました。
コード ブロックFormCollection formList = new FormCollection();
foreach ( Form form in Application.OpenForms )
{
if ( 親ウィンドウだったら )
continue;formList.Add( form);
}foreach ( Form form in formList )
{
form.MdiParent = this;
}