0
public Form fr;
private void button2_Click(object sender, EventArgs e)
{

       fr = Form1.ActiveForm;

       fr.Hide();

       Form3 fr1 = new Form3(fr);
       fr1.Show();
}
4

2 に答える 2

2

シングルトンとして作成する必要はありませんがForm3(それはできないと思います)、インスタンス化する必要があるのは1回だけです。たとえば、次のようなものを使用できます。

public Form fr;
Form3 fr1 = null;
private void button2_Click(object sender, EventArgs e)
{

       fr = Form1.ActiveForm;

       fr.Hide();
       if(fr1==null)
        fr1 = new Form3(fr);
       fr1.Show();
}
于 2013-03-14T19:02:24.583 に答える
0

しないでください。

WindowsフォームはWin32hWndウィンドウをカプセル化するため、UIコンポーネントでシングルトンパターンを使用することはできません。Win32hWndウィンドウは最終的に破棄する必要があり、ウィンドウを復活させることはできません。シングルトンパターンとは逆に、ウィンドウを再作成する必要があります。

さらに、Windowsフォームデザイナには、パブリックのデフォルトコンストラクタが必要です。シングルトンを使用できる場合でも、デザイナーでフォームを編集するたびにプライベートコンストラクターを無効にする必要があります。

プロジェクトにコンシューマーがないと仮定すると、フォームをに変更して、internalすべてのインスタンス化を自分で追跡することをお勧めします。

于 2013-03-14T19:02:35.980 に答える