Tôi có một hộp thoại mà tôi muốn ngăn chặn khi đóng nút OK, nhưng nó trả về, và rằng ngay cả khi thuộc tính AcceptButton được đặt thành không thay vì của tôi Nút OK. Cách tốt nhất để ngăn chặn việc đóng cửa là gì?Ngăn chặn ShowDialog() quay lại khi nhấn nút OK
Trả lời
Thực tế bạn đang thay đổi thuộc tính sai. Bạn chắc chắn muốn AcceptButton
là nút OK. Thuộc tính này xác định đó là nút mặc định trong điều khoản của Windows. Đó là nút được nhấn khi bạn nhấn ENTER trên bàn phím của bạn. Bằng cách thay đổi AcceptButton
, bạn chỉ cần phá giao diện bàn phím cho hộp thoại của mình. Bạn không bị ảnh hưởng theo bất kỳ cách nào xảy ra khi nhấn nút.
Những gì bạn cần làm là đặt thuộc tính DialogResult
của nút thành DialogResult.None
vì đó là điều xác định liệu nút bấm có đóng biểu mẫu hay không. Sau đó, bên trong trình xử lý nhấp chuột của nút, bạn cần quyết định cách phản hồi nút nhấn. Tôi hy vọng rằng, nếu xác thực hộp thoại thành công, bạn nên đóng hộp thoại bằng cách đặt thuộc tính DialogResult
của biểu mẫu. Ví dụ:
private void OKbuttonClick(object sender, EventArgs e)
{
if (this.CanClose())
this.DialogResult = DialogResult.OK;
}
Bạn cần phải xóa DialogResult
của chính nút đó, trong cửa sổ thuộc tính trên nút đặt thành None
.
http://msdn.microsoft.com/en-us/library/system.windows.forms.button.dialogresult.aspx
Nếu DialogResult cho thuộc tính này được thiết lập để bất cứ điều gì khác hơn là Không, và nếu form cha được hiển thị thông qua các phương pháp ShowDialog , nhấp vào nút đóng form cha mà không cần bạn phải để treo lên bất kỳ sự kiện nào.
Rõ ràng, bây giờ nút của bạn sẽ không làm bất cứ điều gì, do đó bạn cần phải đăng ký trình xử lý cho sự kiện Click
.
Cách tốt nhất để ngăn chặn hành vi này là thay đổi thuộc tính DialogResult của nút OK thành DialogResult.None
trong cửa sổ thuộc tính tại thời điểm thiết kế.
Ngoài ra, nếu bạn đã có một số mã trong sự kiện nhấp chuột của nút OK, bạn có thể thay đổi biểu mẫu DialogResult.
private void comOK_Click(object sender, EventArgs e)
{
// your code .....
// Usually this kind of processing is the consequence of some validation check that failed
// so probably you want something like this
if(MyValidationCheck() == false)
{
// show a message to the user and then stop the form closing with
this.DialogResult = DialogResult.None;
}
}
Cách tốt nhất là đặt nút Ok thành tắt thay vì không trả lời đầu vào của người dùng.
Thuộc tính DialogResult NÊN được đặt thành Ok hoặc Có tùy thuộc vào biểu mẫu và AcceptButton cũng phải được liên kết với Ok.
Tôi thường tạo một chức năng trên tất cả các hộp thoại và gọi nó bất cứ khi nào người dùng tương tác với dữ liệu.
void RefreshControls() { button.Enabled = this.ValidateInput(); }
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form2 fLogin = new Form2();
if (fLogin.ShowDialog() == DialogResult.OK)
{
Application.Run(new Form1());
}
else
{
Application.Exit();
}
}
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void btnKlik_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.OK;
}
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}
- 1. Ngăn chặn nút quay lại
- 2. Chặn nút quay lại
- 3. Đường ray: Ngăn chặn chèn trùng lặp do nhấn nút quay lại và lưu lại
- 4. Ngăn chặn nút quay lại từ đóng hộp thoại
- 5. Làm thế nào để ngăn chặn việc gọi onCreateView khi nút quay lại được nhấn vào đoạn trong android
- 6. Loại bỏ DatePickerDialog khi nhấn nút quay lại
- 7. lưu trạng thái khi nhấn nút quay lại
- 8. Ngăn chặn tình cờ Quay lại
- 9. Android: Nhắc người dùng lưu thay đổi khi nút Quay lại được nhấn
- 10. Nút quay lại Actionbarsherlock không quay lại
- 11. Làm thế nào để biết khi nào nút quay lại được nhấn trong một UINavigationControllerStack
- 12. Làm cách nào để làm cho trang tải lại của Firefox khi nhấn nút quay lại?
- 13. Nút quay lại khi reloadOnSearch: false
- 14. Android: Cách ngăn nút quay lại hủy một FragmentDialog
- 15. Xóa tiêu điểm EditText khi nhấn nút quay lại khi phím chức năng hiển thị
- 16. cách quay lại đoạn trước đó khi nhấn nút quay lại theo cách thủ công của từng đoạn riêng lẻ?
- 17. Ngăn sử dụng nút quay lại (trong IE)
- 18. Làm thế nào để Ngăn chặn một Alert Dialog Bắt Closed bởi Nút Quay lại
- 19. Ngăn hoạt ảnh khi nhấp vào nút "Quay lại" trong thanh điều hướng?
- 20. Khối Nút Quay lại trong android
- 21. Chọn nút trong khi nhấn nút enter
- 22. Force sơn lại sau khi nhấn nút
- 23. Nút quay lại Mobile Safari
- 24. Không thể tắt hoạt ảnh chuyển tiếp khi nhấn nút quay lại
- 25. Cách ẩn bàn phím sau khi nhấn vào nút quay lại UINavigationBar trên ios
- 26. android cách đặt một hộp thoại sau khi nhấn một nút quay lại
- 27. Hãy nhớ ajax đã thêm dữ liệu khi nhấn nút quay lại
- 28. Cách ẩn Bàn phím Hộp văn bản khi nút "Xong/Quay lại" được nhấn Xcode 4.2
- 29. Listview: Làm thế nào để duy trì đánh dấu/chọn sau khi nhấn nút quay lại?
- 30. Có cách nào trong History.js để biết khi nào nút quay lại được nhấn