2012-02-10 23 views
8

Hai câu hỏi ở đây, hy vọng điều đó là OK.MessageBoxResult vs. DialogResult

Trước tiên, và chủ yếu, tôi đang cố gắng nhắc người dùng khi họ thoát khỏi ứng dụng của tôi cho dù họ có thực sự muốn thoát hay không. Mã của tôi là như sau:

private void exitToolStrip_Click(object sender, EventArgs e) 
{ 
    DialogResult mBoxResult = MessageBox.Show("Would you like to exit the program?", "Exit Program", MessageBoxButtons.YesNo, MessageBoxIcon.Question); 
    switch (mBoxResult) 
    { 
     case DialogResult.Yes: 
      this.Close(); 
      break; 
     case DialogResult.No: 
      break; 
    } 
} 

Theo MSDN, tôi nên sử dụng MessageBoxResult mBoxResult hơn DialogResult mBoxResult.

Tôi đang sử dụng .NET Framework 3.5. Tôi đọc here rằng pre-3.0 nên sử dụng DialogResult, nhưng nếu tôi đang sử dụng 3.5, không nên MessageBoxResult hoạt động?

Khi tôi cố gắng gọi nó, tôi nhận được

Loại hoặc namespace tên MessageBoxResult không thể được tìm thấy (là bạn thiếu một chỉ sử dụng hoặc tham khảo một hội?).

Tuy nhiên, nó hoạt động tốt khi tôi sử dụng DialogResult. Tại sao điều này?

câu hỏi thứ hai của tôi là về đoạn mã này:

case DialogResult.No: 
break; 

Nếu ai đó chạm vào nút Cancel trên hộp thoại, nó sẽ là thích hợp để đặt bất cứ điều gì trong đó ngoài giờ nghỉ? Hoặc tất cả mọi thứ sẽ hoạt động tốt mà không có nó?

+0

Chỉ cần sử dụng DialogResult và đảm bảo rằng bạn đặt loại kết quả của mỗi nút sao cho nó được chụp/trả lại đúng cách .. điều rất đơn giản để kiểm tra – MethodMan

Trả lời

10

DialogResult là dành cho WinForms. MessageBoxResult là dành cho Silverlight.

Chỉ cần tuyên bố break cho trường hợp No. Nhưng sử dụng một tuyên bố chuyển đổi là quá mức cần thiết ở đây. if (response == yes) Close(); sẽ đủ.

Lưu ý rằng đây không phải là cách lý tưởng để thực hiện những gì bạn muốn. Điều gì xảy ra nếu người dùng nhấp vào nút đóng trên đường viền cửa sổ hoặc nhấn ALT + F4? Thay vào đó, bạn nên xử lý các sự kiện FormClosing:

private void MyForm_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    if (MessageBox.Show("Would you like to exit the program?", "Exit Program", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) 
     e.Cancel = true; 
} 

Bằng cách đặt e.Cancel để true, bạn hủy bỏ việc đóng cửa của biểu mẫu. Bằng cách không làm gì cả, bạn cho phép đóng biểu mẫu.

7
  • Sử dụng DialogResult nếu ứng dụng của bạn là một ứng dụng WinForms
  • Sử dụng MessageBoxResult nếu ứng dụng của bạn là một/Silverlight ứng dụng WPF

Như bạn có thể thấy, không gian tên khác nhau: System.Windows.Forms (Winforms) vs System.Windows (WPF).

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