我有一个用<class>.ShowDialog()显示的对话框.它有一个确定按钮和一个取消按钮;OK按钮还有一个事件处理程序.

我想在事件处理程序中进行一些输入验证,如果失败,用消息框通知用户,并阻止对话框关闭.我不知道如何做最后一部分(防止关闭).

推荐答案

Given that you've specified you want a pop error dialog,一种方法是将验证转移到OnClosing事件处理程序中.在本例中,如果用户对对话框中的问题回答"是",则表单关闭被中止.

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
   // Determine if text has changed in the textbox by comparing to original text.
   if (textBox1.Text != strMyOriginalText)
   {
      // Display a MsgBox asking the user to save changes or abort.
      if(MessageBox.Show("Do you want to save changes to your text?", "My Application",
         MessageBoxButtons.YesNo) ==  DialogResult.Yes)
      {
         // Cancel the Closing event from closing the form.
         e.Cancel = true;
         // Call method to save file...
      }
   }
}

通过设置e.Cancel = true,您将防止窗体关闭.

However, it would be a better design/user experience to display the validation errors inline(通过以某种方式突出显示有问题的字段、显示工具提示等)and prevent the user from selecting the OK button in the first place.

.net相关问答推荐

PowerShell中窗体定时器和系统定时器的统一处理

如何使用.NET8MapIdentityApi设置OpenApi操作ID

为什么脚本不从 _Layout 加载并且必须添加到部分视图中?

AppShell - 返回导航失败,匹配的路由不明确......但我只注册了一次路由

如何为多种文件类型设置 FileSystemWatcher 过滤器?

为什么 .NET 中的 System.Version 定义为 Major.Minor.Build.Revision?

NonSerialized 属性

JavaScript 中的IsNullOrWhitespace?

注册 COM 互操作与使程序集 COM 可见

.net:System.Web.Mail 与 System.Net.Mail

String.Format - 它是如何工作的以及如何实现自定义格式字符串

如何确定字符串是 C# 中的有效 IPv4 还是 IPv6 地址?

如何在 WebBrowser 控件中注入 Javascript?

.NET 进程间通信的最佳 Select 是什么?

EF Core 添加迁移构建失败

如果选中,则更改列表框项的 WPF DataTemplate

实体框架太慢了.我有哪些 Select ?

Uri.Host 和 Uri.Authority 有什么区别

MultipleActiveResultSets=True 还是多个连接?

连接字符串而不是使用一堆 TextBlocks