0

FormClosingイベントをオーバーライドして、クリックしたときにシステムトレイを最小化しました。これが私のコードです:

    private void OnFormClosing(object sender, FormClosingEventArgs e)
    {
        if (e.CloseReason == CloseReason.UserClosing)
        {
            e.Cancel = true;
            this.Hide();

            notifyIcon.BalloonTipText = "Server minimized.";
            notifyIcon.ShowBalloonTip(3000);
        }
        else
        {
            this.Close();
        }
    }

また、notifyIconのDoubleClickイベントも設定しました。コードは次のとおりです。

    private void showWindow(object sender, EventArgs e)
    {
        Show();
        WindowState = FormWindowState.Normal;
    }

これに関して2つの質問があります。

1)さて、右上の「X」ボタンをクリックすると、アプリケーションはトレイに最小化されますが、閉じることができません(意味があります...)。システムトレイのアイコンを右クリックすると、[復元]、[最大化]、[終了]のオプションを含むメニューが開きます。

2)(これは、私が言及した変更のために今のところアプリケーションを閉じることができないため、shift + f5でプログラムを終了することに関連している可能性があります)。アプリケーションが終了すると、トレイに最小化した後、マウスで渡すまでアイコンはトレイに残ります。どうすれば修正できますか?

4

1 に答える 1

0

コンテキストメニューによってクローズが要求されたことを示す変数を追加するだけです。言う:

    private bool CloseRequested;

    private void exitToolStripMenuItem_Click(object sender, EventArgs e) {
        CloseRequested = true;
        this.Close();
    }

    protected override void OnFormClosing(FormClosingEventArgs e) {
        base.OnFormClosing(e);
        if (e.CloseReason == CloseReason.UserClosing && !CloseRequested) {
            e.Cancel = true;
            this.Hide();
        }
    }

FormClosingイベントハンドラーでClose()を呼び出さないように注意してください。これにより、ApplicationクラスがOpenFormsコレクションを反復処理するときに問題が発生する可能性があります。ゴーストアイコンが残っている可能性のある理由。助ける必要はありません。

于 2013-01-27T13:05:56.723 に答える