0

Form1 と Form2 の 2 つのフォームがあります。これは、form1 を作成した後に form2 を作成するコードです。

F2=new Form2();
F2.Dock = DockStyle.Fill;
F2.TopLevel = false;
F2.Parent = F1;//setting the parent of form1 to be form1

また、アプリケーションに Form2 オブジェクトを 1 つだけ配置したいのですが、親が変更されるため、F1 が破棄され、F2 の親が Form1 タイプの他のオブジェクトに設定されます。F1を処分するとき、F2が処分されるとき、F1を処分するときにF2を処分しないようにする方法は? 子から onparentdispose イベントを取得して、その親を変更する方法はありますか? ここに画像の説明を入力

編集:

赤いフォームごとに緑のフォームのみが必要ですが、青いフォームのレイアウトが変更されるため、破棄されます

4

2 に答える 2

1

グローバル静的変数を使用して、Form2のインスタンスを指すことができます。例えば:

public class Globals
{
    public static Form2 form2;
}

Form2オブジェクトを作成するときのどこかで、それをGlobals.Form2variabeに割り当てます。

F2=new Form2();
F2.Dock = DockStyle.Fill;
F2.TopLevel = false;
F2.Parent = F1;//setting the parent of form1 to be form1
Globals.form2 = F2; // Save it to an global variable

次に、Form1のFormClosingイベントハンドラーで、Gloabls.Form2.Parentプロパティを別のフォームオブジェクト(メインフォームなど)またはnullに設定します。このようにして、Form1が破棄されても、Form2オブジェクトは存続します。

于 2012-10-11T10:19:14.703 に答える
1

イベントで F1 の子フォームを取得しFormClosing、その親を別のフォームに設定できます。

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    foreach (Form frm in this.Controls.OfType<Form>())
    {
        frm.Parent = Application.OpenForms.OfType<Form1>().First(f => f.Tag == "Foo");
    }
}

.First(f => f.Tag == "Foo")F1 の別のインスタンスを見つける方法を変更してください。

于 2012-10-11T12:25:42.807 に答える