2011-01-31 40 views
5

Tôi đang tìm cách nhắc người dùng lưu dữ liệu khi họ đóng cửa sổ biểu mẫu trong ứng dụng biểu mẫu winforms. Tôi không thể tìm ra cách kích hoạt lời nhắc cho người dùng, họ nên nhấp vào hộp màu đỏ ở góc trên cùng bên phải của biểu mẫu.Sự kiện đóng cửa sổ trong ứng dụng winforms

Ứng dụng của tôi hiện có cờ boolean, được đặt thành True trên sự kiện được thay đổi. Vì vậy, tôi sẽ chỉ cần kiểm tra giá trị boolean trong bất kỳ sự kiện nào được kích hoạt bởi hộp màu đỏ.

Bạn có lời khuyên nào không?

Trả lời

11

Bạn cần xử lý FormClosing event. Sự kiện này được nâng lên ngay trước khi biểu mẫu sắp bị đóng, cho dù người dùng đã nhấp vào nút "X" trên thanh tiêu đề hay thông qua bất kỳ phương tiện nào khác.

Vì sự kiện được nâng lên trước khi biểu mẫu bị đóng, nó cung cấp cho bạn cơ hội để hủy sự kiện đóng. Bạn được chuyển một phiên bản của lớp FormClosingEventArgs trong thông số e. Bằng cách đặt e.Cancel property thành True, bạn có thể hủy sự kiện đóng đang chờ xử lý.

Ví dụ:

Private Sub Form_Closing(ByVal sender As Object, ByVal e As FormClosingEventArgs) 
    If Not isDataSaved Then 
     ' The user has unsaved data, so prompt to save 
     Dim retVal As DialogResult 
     retVal = MessageBox.Show("Save Changes?", YesNoCancel) 
     If retVal = DialogResult.Yes Then 
      ' They chose to save, so save the changes 
      ' ... 
     ElseIf retVal = DialogResult.Cancel Then 
      ' They chose to cancel, so cancel the form closing 
      e.Cancel = True 
     End If 
     ' (Otherwise, we just fall through and let the form continue closing) 
    End If 
End Sub 
+0

Override OnFormClosing để thay thế. Hãy chú ý đến e.CloseReason. –

5

Nếu bạn ghi đè phương pháp của hình thức OnFormClosing, bạn có cơ hội để thông báo cho người dùng rằng những thay đổi đã được thực hiện, và cơ hội để hủy đóng biểu mẫu.

Sự kiện cung cấp cho bạn một cá thể FormClosingEventArgs có thuộc tính CloseReason (cho bạn biết lý do biểu mẫu đóng) cũng như thuộc tính Hủy mà bạn có thể đặt thành True để ngừng biểu mẫu đóng.

5

tôi implent mã này cho C# hy vọng nên nó hữu ích cho bạn

protected override void OnFormClosing(FormClosingEventArgs e) 
      {    
       base.OnFormClosing(e); 
       if (PreClosingConfirmation() == System.Windows.Forms.DialogResult.Yes) 
       { 
        Dispose(true); 
        Application.Exit(); 
       } 
       else 
       { 
        e.Cancel = true; 
       } 
      } 

     private DialogResult PreClosingConfirmation() 
     { 
      DialogResult res = System.Windows.Forms.MessageBox.Show(" Do you want to quit?   ", "Quit...", MessageBoxButtons.YesNo, MessageBoxIcon.Question); 
      return res; 
     } 
Các vấn đề liên quan