2013-07-01 25 views
5

Vấn đề của tôi là tôi xác thực số TextBox trong sự kiện Leave và tôi kiểm tra xem điều này có TextBox không. Nếu văn bản trong số TextBox này giống với số MessageBox xuất hiện, nhưng nếu biểu mẫu đóng và tiêu điểm nằm trong số TextBox, số MessageBox này xuất hiện vì TextBox không có gì.Cách ngăn chặn sự kiện đó trong trình kích hoạt kiểm soát khi biểu mẫu đóng

Làm cách nào để tránh xác thực trong sự kiện Leave khi biểu mẫu đóng?

Trả lời

6

Bạn sẽ cần ghi đè phương thức OnFormClosing trên biểu mẫu và đặt cờ cho bạn biết rằng biểu mẫu đang đóng. Sau đó, khi xác thực, hãy kiểm tra cờ đó trước tiên.

Đảm bảo đặt cờ trước gọi base.

protected override void OnFormClosing(FormClosingEventArgs e) 
{ 
    _isClosing = true; 

    base.OnFormClosing(e); 
} 
+0

tôi muốn thử điều này, nhưng cách tôi gán sự kiện này ghi đè, _isClosing là căn hộ tôi cần xác thực? –

+0

@ JoséGordilloLópez, vui lòng xem cập nhật của tôi (tôi đã thay đổi 'virtual' thành' override'). Hơn nữa, '_isClosing' là biến lớp' private bool _isClosing; 'mà bạn sẽ đặt để cho biểu mẫu biết nó đang đóng. Sau đó, trong sự kiện 'Leave' bạn sẽ làm điều này,' if (_isClosing) {return; } 'để hủy xác thực. –

+0

cảm ơn, công việc này rất tốt, và cho phần còn lại của người dùng, nhờ –

4

Một cách là xóa các sự kiện mà hộp văn bản tăng lên. Tôi không chắc chắn cách bạn đang xác thực nhưng bạn có thể thử đặt thuộc tính Enabled thành sai trong sự kiện FormClosing.

private void Form1_FormClosing(Object sender, FormClosingEventArgs e) 
{   
    myTextBox.Enabled = false; 
} 

Hoặc loại bỏ các handler Leave kiện

private void Form1_FormClosing(Object sender, FormClosingEventArgs e) 
{  
    myTextBox.Leave -= myTextBox_Leave; 
} 
1

Sử dụng "xác nhận" sự kiện của textbox để đạt được điều này thay vì sự kiện "rời".

Điều này sẽ đảm bảo mã của bạn được thực thi trước khi biểu mẫu đóng và sẽ đạt được chính xác những gì bạn cần.