0

Form Closingボタン (古典的な赤い X ボタン)をクリックしたときに、アプリケーションをシステム トレイに隠したいと思います。このコードを提供しました。

    private void Ana_FormClosing(object sender, FormClosingEventArgs e) 
    {            
        e.Cancel = true; 
        this.Hide();          
    }

そのため、アプリケーションはまだ で実行されていsystem trayます。を追加し、ContextMenuStripマウスを右クリックするとContextMenuStripボタンCloseが表示されますが、そのCloseボタンをクリックするとアプリケーションがまだ実行されています。そのボタンをクリックしたときにアプリケーションを終了したいClose。これが私のコードです:

   private void kapatToolStripMenuItem_Click(object sender, EventArgs e) //Close
   {
        DialogResult ext;
        ext = MessageBox.Show("Çıkmak İstediğinizden Emin misiniz?", "Onay", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

        if (ext == DialogResult.Yes)
        {
            Application.Exit();                
        }       
    }

    private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
    {
        this.Show();                      
    }
4

2 に答える 2

0

呼び出すApplication.Exit()と、実際にはすべてのフォームを閉じようとしますFormClosingが、キャンセルするようにハードコードされているため、タスクを完了できません。

現在の構造の 1 つのオプションは、AllowCloseフラグを作成することです。これは、フォームのプロパティである場合もあれば、グローバルな静的値である場合もあります。

例えば:

//in your form
public bool AllowClose {get;set;}

private void Ana_FormClosing(object sender, FormClosingEventArgs e) 
{
    if(!AllowClose)
    {            
        e.Cancel = true; 
        this.Hide();  
    }        
}

//in your context menu event
private void kapatToolStripMenuItem_Click(object sender, EventArgs e) //Close
{

    DialogResult ext;
    ext = MessageBox.Show("Çıkmak İstediğinizden Emin misiniz?", "Onay", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
    if (ext == DialogResult.Yes)
    {
        this.AllowClose = true;
        Application.Exit();
    }       
}
于 2013-08-01T09:41:57.743 に答える
0

これを試して、

bool isClosing = false;


 private void Ana_FormClosing(object sender, FormClosingEventArgs e) 
    {            
        if(!isClosing)
        {
           e.Cancel = true; 
           this.Hide();          
        }
    }




private void kapatToolStripMenuItem_Click(object sender, EventArgs e) //Close
    {
        DialogResult ext;
        isClosing = true;

        ext = MessageBox.Show("Çıkmak İstediğinizden Emin misiniz?", "Onay", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
        if (ext == DialogResult.Yes)
        {
            Application.Exit();

        }       
    }
于 2013-08-01T09:45:15.363 に答える