c# - 在 WinForm 中验证数据

标签 c# .net winforms

我在我的 WinForms 应用程序中创建了一个对话框。这有许多文本框和确定/取消按钮。当用户单击“确定”时,我只想在所有条目都有效时关闭对话框。我可以看到如何分别使用每个控件的“验证”事件来执行此操作。那也行。但是这些似乎只有在控件失去焦点时才会触发。但是,我的对话框中的空文本框也是无效输入,这意味着用户可能永远不会关注该控件。我更愿意在单击“确定”时验证所有控件。

不过我不知道该怎么做。覆盖 OK 按钮的 onclick 似乎没有阻止窗口关闭的选项。 Form IsClosing 事件通过设置 Cancel = true 来完成。但这似乎无法区分点击的是确定按钮还是取消按钮。显然,如果单击取消按钮,我不关心验证,并且无论如何都希望允许表单关闭。

执行此操作的最佳方法是什么?]

更新: 我已经在我的表单和 ok 按钮上将 CausesValidation 设置为 true,但是当我单击 ok 按钮时我的验证事件没有被触发。我提到这个是因为它被建议作为下面的解决方案。

最佳答案

请选择表单 > 将属性 CausesValidation 设置为 true

选择“确定”按钮并再次将属性 CausesValidation 设置为 true

然后它将负责所有验证。

要点: 1) 您必须在所有验证事件处理程序中提及 e.Cancel=true

2) 如果您的按钮在面板中,那么您必须将面板(或任何父控件的)CausesValidation 属性设置为 true

编辑:

3) 在失去焦点之前验证点火。在按下 Enter 的同时 导致默认按钮点击,它不会将焦点移动到那个 按钮,因此如果您将表单的 AcceptButton 属性设置为确定按钮,则不会触发任何验证事件

关于c# - 在 WinForm 中验证数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7109350/

相关文章:

c# - 如何将C# Winform Project连接到局域网中的XAMPP MySQL服务器?

c# - 如何在 C# 中传递方法参数作为泛型接口(interface)基类型?

c# - 将列表与文本框一起使用

c# - Visual Studio - 尝试将从其他表单获取的变量添加到表中

c# - asp.net webform 打印一致性

c# - WebRequest 获取没有异常的页面?

.net - Socket ReceiveFromAsync 是隐式多线程的吗?

c# - 在 C# 中为 DataGridViewButtonColumn 设置图像

c# - 如何使用日期时间获取前一天

.net - Mono.Cecil 如何定义输出参数