2009-09-03 22 views
13

Visual Studio 2008 IDE'de editör penceresini (sekme) kapatan etkinlikleri yakalamak istiyorum. Ben dte2.Application.Events.get_CommandEvents (null, 0) .BeforeExecute başarıyla yakalanan tür olayların kullandığınızda:Capture window close event

  • file.close
  • File.CloseAllButThis
  • File.Exit
  • Window.CloseDocumentWindow ve diğerleri.

Pencerede kod kabul edilemezse, olayı durdururum (CancelDefault = true).

Ama sağ taraftaki "X" düğmesine tıklarsam, "Değişiklikleri Kaydet"; iletişim kutusu görüntülenir, editör penceresi ile sekme kapatın ve yakalanan hiçbir olayım yok. Bu durumda WindowClosing olayını yakalayabilirim, ama etkinliği iptal edemiyorum.

"x" düğmesini tıklatıp durdurma olayını işlemek mümkün mü?

+0

"X" i tıklarsanız, ancak "Değişiklikleri Kaydet" görünmezse, sorun hala devam ediyor mu? –

+0

Doğrulama yapmamanızın ve "Değişiklikleri Kaydet" iletişim yöntemlerinde böyle bir neden var mı? Genellikle, pencere kapanma olaylarında değişiklikler olup olmadığını kontrol edip "Değişiklikleri Kaydet" komutunu başlatır. "Değişiklikleri Kaydet" yöntemi, doğrulama iyise ve kaydetme başarılı olursa veya Doğrulama başarısız olursa, Doğru olarak döndürür ... Daha sonra, bu değer, pencere kapatma olay işleyicisine geri gönderilir. onu reddetmek ve hiçbir şey yapmamak için pencere veya yanlış. – ewall

cevap

0

Eğer WM_CLOSE, WM_QUIT ve WM_DESTROY yolunu kesmek için SetWindowsHookEx işlevini kullanarak bir kanca kurmak mümkün olabilir bazı Windows API kodunu kullanmak hazırsanız. C#

1

böyle bir şey olurdu: o zaman

olay işleyicisi Kapatılması ve eklemek
void MyWindow_Closing(object sender, CancelEventArgs e) 
     { 
      if(something) 
       e.Cancel = true; //<- thats the magic part you want 
} 
0
öneririm

, MDI alt pencere olaylarını taşıma hatları üzerinde kontrol !!

Yönlendiren düzenleyici sekmesi temel olarak bir MDI Çocuk Penceresi örneğidir.

Bu yardımcı olur umarız!