2013-08-01 6 views
0

Я хочу скрыть свое приложение в системном трее, когда я нажимаю кнопку «Закрытие формы» (клавиша красного цвета X). Я предоставил этот код;C# Выход из приложения с ContextMenuStrip

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

Так что моя программа стила работает в системном трее, и я добавил ContextMenuStrip и когда я правая кнопка мыши на моем ContextMenuStrip мышей придумала «Закрыть», но когда я нажимаю, что «Закрыть» моя программа все еще работает, я хочу, чтобы выйти из моего приложения, когда я нажимаю «Закрыть». Вот мой код:

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();      
    } 
+0

Это потому, что само приложение предотвращения закрытия (Ваш первый фрагмент). –

ответ

0

Вызов Application.Exit() будет на самом деле пытается закрыть все ваши формы, и потому, что ваш FormClosing закодирован быть отменен, то она не может выполнить поставленную задачу.

Один из вариантов с вашей текущей структурой - создать флаг 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(); 
    }  
} 
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(); 

     }  
    } 
+0

Это вызывает ту же проблему и останавливает работу оригинала. Вы хотите 'if (! IsClosing)' – musefan

Смежные вопросы