2

私は 2 つのフォームを持っています。そのうちの 1 つは、最初のボタンをクリックすると表示されます。2番目のフォームを表示するためのボタンをクリックすると、最初のフォームが最小化され、2番目のフォームが正常に開くようにしたい。2 番目のフォームが閉じられると、最初のウィンドウは最小化されなくなり、以前の場所に配置されます。

ユーザーはこれをオーバーライドして、クイックランチエリアの最初のフォームをクリックするだけで、必要に応じて最初のフォームを表示できるので、ダイアログのような 2 番目のフォームは必要ありません。

以下のコードを試していますが、ボタンをクリックすると、最初のフォームが最小化され、2 番目のフォームも最小化されます! そのため、手動で 2 番目のフォームの最小化を解除する必要があります。

    private void button1_Click(object sender, EventArgs e)
    {
        if (DebugForm != null)
            return;

        DebugForm = new DebugForm();
        DebugForm.Closed += delegate
                                 {
                                     WindowState = FormWindowState.Normal;
                                     DebugForm = null;
                                 };

        WindowState = FormWindowState.Minimized;
        DebugForm.Show();
        DebugForm.WindowState = FormWindowState.Normal;
        DebugForm.BringToFront();
    }
4

2 に答える 2

8

画面に別のウィンドウがある場合、両方のウィンドウを最小化するようです。アプリケーション以外のすべてのウィンドウを最小化します。機能することがわかります。次のような他のウィンドウと一緒に動作し続けます。

これを変える:

WindowState = FormWindowState.Minimized;
DebugForm.Show();
DebugForm.WindowState = FormWindowState.Normal;
DebugForm.BringToFront();

これに:

DebugForm.Show();
WindowState = FormWindowState.Minimized;

私が削除した行は、実際には必要ありませんでした。重要なことは、最小化する前に、親フォームの Z オーダーと調整するステートメントの順序です。

于 2012-10-12T17:55:09.473 に答える
0

同様の問題に遭遇しました。問題は、コールバックしようとしていたフォームがアクティブなフォームではないことでした。これが私が問題を解決した方法です。現在の from2 のボタンをクリックすると、次のように追加されました。

if (form1.ActiveForm == null)// Check to see if form is active
{
    form1 frm = (form1)Application.OpenForms["form1"];// find open form
    frm.WindowState = FormWindowState.Maximized;// Set state
    frm.ShowInTaskbar = true; //set to show in taskbar
}
于 2016-09-29T16:58:16.817 に答える