2009-04-24 33 views
6

Xin lỗi nếu đây là câu hỏi ngớ ngẩn nhưng tôi là người mới bắt đầu ở đây.C# Xác nhận trước khi rời khỏi sự kiện accept_button

Tôi có một hộp thoại tùy chỉnh đơn giản với hai nút: Chấp nhận và Hủy. Nút Chấp nhận là acceptButton của biểu mẫu.

Tôi muốn thực hiện một số xác nhận về sự kiện Accept_Click và quyết định xem tôi có thể đóng hộp thoại hay không, nhưng mỗi khi nó rời khỏi phương thức này, hộp thoại sẽ tự động đóng và trả về Ok.

Tôi có thể làm gì để ngăn hộp thoại tự đóng? hoặc tôi phải làm mọi thứ theo cách khác?

cảm ơn

+0

http://stackoverflow.com/questions/4590903/exit-sub-on-dialogresult-ok-button/4591022#4591022 – captonssj

Trả lời

10

tôi sẽ có một biến cấp hình thức (gọi nó _ vetoClosing) Trong nút chấp nhận của sự kiện Click, tôi sẽ chạy xác nhận và đặt biến dựa trên rằng:

private void acceptButton_Click(object sender, EventArgs e) 
    { 
     // Am I valid 
     _vetoClosing = !isValid(); 
    } 

Sau đó, trong sự kiện FormClosing, tôi sẽ hủy đóng nếu _vetoClosing là đúng

private void Form_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     // Am I allowed to close 
     if (_vetoClosing) 
     { 
      _vetoClosing = false; 
      e.Cancel = true; 
     } 
    } 

Tắt nút Chấp nhận là tối ưu vì bạn mất chức năng Enter to Press.

+0

Tôi đồng ý ... sự kiện đóng là cách để xử lý việc này. –

0

Có phải nút AcceptButton hoặc CancelButton trên biểu mẫu được đặt thành nút đó không? Nếu vậy, hãy thử gỡ bỏ nó và tự thiết lập DialogResult trong trình xử lý của bạn khi bạn muốn đóng hộp thoại.

+1

tôi không muốn làm điều đó vì y muốn nó là nút mặc định khi tôi nhấn Enter – DkAngelito

2

Tôi sẽ xác thực là thay đổi điều khiển và chỉ bật nút Chấp nhận nếu toàn bộ biểu mẫu hợp lệ.

Điều này sẽ cho phép bạn giữ nút của mình làm nút mặc định (AcceptButton), nhưng ngăn điều này xảy ra.

1

Một giải pháp sạch hơn sẽ được thiết lập DialogResult để None:

private void acceptButton_Click(object sender, EventArgs e) 
{ 
    if (!isValid()) { 
     this.DialogResult = System.Windows.Forms.DialogResult.None; 
    } 
} 
Các vấn đề liên quan