0

次の問題があります。

スタック内の複数のモーダル フォームを開きます (たとえば、form1 はモーダル フォーム form2 を開き、次にモーダル フォーム form3 を開きます)。スタック全体を非表示にしたいと思います。

Hide メソッドを呼び出すか、親に Visible プロパティを設定しようとしましたが、これは親を非表示にするだけです。また、すべてのフォームを個別に非表示にしようとしましたが、前述のメソッドを呼び出すスレッドをロックするフォームごとに ShowDialog を呼び出す必要があります。

最初のフォームでプロパティを設定するだけで、親のステータスを継承し、カスケードで非表示になるようにモーダル ダイアログを設定する方法はありますか?

他の提案も受け付けています。

4

2 に答える 2

1

非表示にしたフォームを再表示するには、 obj.Visible = falsesetobj.Visible = trueではなくset を設定しますShowDialog

ShowDialogダイアログがすでにメッセージ ループを実行しているため、メッセージ ループが開始され、混乱が生じます。

于 2012-02-02T16:45:13.833 に答える
1

モーダル ダイアログについて話しているので、このアクションを開始するのは最後に開いたダイアログになります。次の例のようにすべてのフォームを開き、次にHide()最後のフォームを開きます。

public partial class Form1 : Form
{
    Form2 frm2 = new Form2();

    public Form1()
    {
        InitializeComponent();
        frm2.VisibleChanged += frm2_VisibleChanged;
        Shown += Form1_Shown;
    }

    void Form1_Shown(object sender, EventArgs e)
    {
        frm2.ShowDialog();
    }

    void frm2_VisibleChanged(object sender, EventArgs e)
    {
        if (frm2.Visible == false) Hide();
    }
}
于 2012-02-02T21:27:57.937 に答える