4

私は奇妙な問題に取り組んできました。プロジェクトで KryptonForm を使用しています。フォーム (form1 など) があり、このフォームからボタンをクリックして別のフォームを開く必要があります。コードは次のとおりです。

void btn_click(object sender, EventArgs e)
{
    Visible = false;
    ShowInTaskbar = false;

    var f = new Form2();
    f.ShowDialog();

    Visible = true;
    ShowInTaskbar = true;
}

問題は、Form2を閉じるとForm1も閉じることです。Form2DialogResult = DialogResult.Noneから設定してみましたがだめでした。私を助けてください。

私は常にこの手法を使用していますが、このようなことは一度もありません。

4

3 に答える 3

7

はい、このコードは面倒です。ユーザーがダイアログを閉じると、うまくいきません。Windows は、フォーカスを与える別のウィンドウを見つける必要があります。アプリには何も残っていません。メイン ウィンドウは見えません。次に、別のアプリのウィンドウを選択します。たとえば、これが Visual Studio 内のウィンドウになる可能性は十分にあります。大きなもの。メイン フォームが背後に消えます。

ダイアログを閉じる前に、メイン ウィンドウが再び表示されていることを確認する必要があります。これを行うには、ダイアログの FormClosing イベント ハンドラーをサブスクライブします。例えば:

    private void button1_Click(object sender, EventArgs e) {
        using (var dlg = new Form2()) {
            dlg.StartPosition = FormStartPosition.Manual;
            dlg.Location = this.Location;
            dlg.FormClosing += (s, ea) => this.Show();    // <=== Here
            this.Hide();
            if (dlg.ShowDialog() == DialogResult.OK) {
                // etc...
            }
        }
    }
于 2010-12-05T13:37:55.887 に答える
0

何日も私を悩ませた!! これを見つけました: https://bytes.com/topic/net/answers/769433-c-showdialog-inside-showdialog-closing-both-return

結果は受け継がれていましたが、その理由はわかりません。しかし、 .ShowDialog() の後に を入れるthis.DialogResult = DialogResult.Noneと、修正されます。これはそもそも起こるべきではありませんが、これで修正されるので、あまり気になりません。


ボタン自体のdialogResultを「None」に変更するかthis.Btn1.DialogResult...、デザイナーから削除してみてください。

https://social.msdn.microsoft.com/Forums/vstudio/en-US/543093ad-1860-4428-bae1-b0d4f112e04b/showdialog-closes-parent?forum=csharpgeneral

于 2018-06-21T16:53:10.673 に答える