2011-04-07 21 views
5

Üzerinde LogOutEvent ve form kapatma olayı olan bir form var. İşte ben onun formu kapanış özelliği taşıdığı belirtildi oturum kapatma düğmesini tıkladığımızdaKapatma olayı hem UserClosing hem de this.close üzerinde tetiklendi

private void MainGUI_FormClosing(Object sender, FormClosingEventArgs e) 
{ 
     if (e.CloseReason == CloseReason.UserClosing) 
     { 
      DialogResult yesNo = MessageBox.Show(this, "Are you sure you want to Log Off?", "Log Off", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); 

      if (yesNo == DialogResult.Yes) 
      { 
       Application.Exit(); 
      } 
      else 
      { 
       e.Cancel = true; 
      } 
     } 
} 

Benim Sorun

private void btnLogOut_Click(object sender, EventArgs e) 
{ 
     DialogResult yesNo = MessageBox.Show(this, "Are you sure you want to Log Off?", "Log Off", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); 

     if (yesNo == DialogResult.Yes) 
     { 
      new LoginForm(); 
      this.Close(); 
      string tst2 = Logout(AgentId, AgentPwd, ExtensionId); 
      if (tst2 == "TCF000") 
       MessageBox.Show(" Logout Success"); 
      else 
       MessageBox.Show("Logout Failed"); 
     } 
} 

Ve Form Kapanış Etkinliği, kodudur. Bunun için daha iyi bir kod önerilebilir mi?

'X' düğmesine tıkladığımda uygulamayı kapatmalı ve LogOut'u tıklattığımda geçerli pencereyi kapatmalı ve oturum açma formuna gitmeliyiz.

+0

bunu çağırıyorsunuz.Close() bu nedenle yakın olayı tetikleyecek şekilde – V4Vendetta

+1

@ V4Vendetta @Kragen @Marc Ama CloseReason.UserClose'un yalnızca X tıklandığında tetikleyici olacağını düşündüm. Ben hatalıydım. Kapanış için tetikleyici olaylar nelerdir ve ne zaman tetiklenir –

+0

Bu size [Yardım edebilirim] olabilir (http://stackoverflow.com/questions/3631490/bug-in-formclosingeventargs-closereason) – V4Vendetta

cevap

5

Ben daha iyi bir çözüm olduğundan emin değilim, ama bu yaptığı işlerde: Bu formu kapanış olay işleyicisi başka bir yöntem formu yakın yürütmesini ise tespit ve normal işleme atlamak için izin verir

private bool loggingOut; 

private void Form1_DoubleClick(object sender, EventArgs e) 
{ 
    this.loggingOut = true; 
    this.Close(); 
    // This is optional as we are closing the form anyway 
    this.loggingOut = false; 
} 

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    if (e.CloseReason == CloseReason.UserClosing && !loggingOut) 
    { 
     // Handle form closing here 
    } 
} 

Eğer öyleyse.

Alternatif olarak sadece Hide formu yerine ve kullanıcı günlükleri aynı formu instance'a dahaki sefere yeniden kullanabilirsiniz. Iyi

+0

Teşekkür ederim, bu Çalışma .. –

2

... evet! form kapanıyor; Neden bu olayı ateşlemiyor?

CloseReason yardımcı olmazsa, çıkış yaptığınızda doğru olarak ayarladığınız formun üzerine bir bool alanı atmanız yeterlidir; ve kapanış etkinliğinde bu alanı kontrol edin.

İlgili konular