2009-09-03 44 views
13

Tôi muốn chụp các sự kiện đóng cửa sổ trình soạn thảo (tab) trong Visual Studio 2008 IDE. Khi tôi sử dụng dte2.Application.Events.get_CommandEvents (null, 0) .BeforeExecute tôi bắt thành công các sự kiện như:Sự kiện đóng cửa sổ chụp

  • File.Close
  • File.CloseAllButThis
  • File.Exit
  • Window.CloseDocumentWindow và các thiết bị khác.

Nếu mã trong cửa sổ không được chấp nhận, tôi sẽ dừng sự kiện (CancelDefault = true).

Nhưng nếu tôi nhấp vào nút "X" ở bên tay phải, "Lưu thay đổi"; hộp thoại xuất hiện, tab có cửa sổ trình biên tập đóng và tôi không có bất kỳ sự kiện nào được chụp. Trong trường hợp này tôi có thể chụp sự kiện WindowClosing, nhưng không thể hủy sự kiện.

Có thể xử lý sự kiện nhấp và dừng nút "x" không?

+0

Nếu bạn nhấp vào "X", nhưng "Lưu thay đổi" sẽ không xuất hiện, vấn đề vẫn xảy ra? –

+0

Có lý do nào khiến bạn không thực hiện việc xác nhận và như vậy trong các phương thức "Lưu thay đổi" không? Thông thường, một sự kiện đóng cửa sổ sẽ kiểm tra các thay đổi và bắt đầu lời nhắc "Lưu thay đổi". Phương thức "Lưu thay đổi" sau đó sẽ trả về True nếu xác thực tốt và lưu thành công hoặc False nếu xác thực không thành công ... Sau đó, giá trị đó sẽ được gửi trở lại trình xử lý sự kiện đóng cửa sổ, True để tiếp tục và đóng cửa sổ hoặc False để từ chối nó và không làm gì cả. – ewall

Trả lời

0

Nếu bạn sẵn sàng sử dụng một số mã API Windows, bạn có thể thiết lập móc bằng chức năng SetWindowsHookEx để chặn WM_CLOSE, WM_QUITWM_DESTROY.

1

Trong C# nó sẽ là một cái gì đó như thế này: bạn thêm Bế xử lý sự kiện và sau đó

void MyWindow_Closing(object sender, CancelEventArgs e) 
     { 
      if(something) 
       e.Cancel = true; //<- thats the magic part you want 
} 
0

tôi sẽ đề nghị, kiểm tra trên dây chuyền xử lý các sự kiện cửa sổ MDI Child !!

Tab trình soạn thảo bạn đang giới thiệu về cơ bản là một ví dụ của MDI Child Window.

Hy vọng điều này sẽ hữu ích!

Các vấn đề liên quan