- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在考虑验证用户输入的最佳方式。
让我们想象一些 TextBoxes、CheckBoxes 或您喜欢的任何 .NET 控件,其中用户输入必须被验证为 OK 或 NOK。一旦用户填写了所有必填字段,他就会通过按钮提交。
现在我必须知道哪些字段之前被确认为 OK,哪些字段被确认为 NOK。到目前为止,我总是通过为每个控件声明一个全局 bool 变量来处理这种情况。但是我不喜欢那样...
我很确定一定有另一种方法!我想做的是使用名为 status 或类似属性的 OK 或 NOK 属性扩展这些 .NET 控件。你能做到吗?如果是这样,你是怎么做到的?类似的东西已经存在了吗?
感谢您的回复!
最佳答案
您在 Windows 窗体中有一些有用的工具来执行验证和显示错误消息,包括:
IDataErrorInfo
界面Validating
控制事件ErrorProvider
组件ValidateChildren
方法与AutoValidate
表格属性使用以上选项:
IDataErrorInfo 接口(interface)
在您有一些模型类的情况下,最适合在 Windows 窗体中进行验证和提供错误消息的方法是实现 IDataErrorInfo
。它受数据绑定(bind)机制和一些 Windows 窗体控件(如 DataGridView
和 ErrorProvider
)的支持。
为了简单起见,您可以在类中编写验证规则并使用 IDataErrorInfo
属性返回错误消息。即使您想应用更高级的场景,例如使用验证引擎,最后最好实现 IDataErrorInfo
以获得与寡妇窗体的最大一致性。
您将使用 ErrorProvider
来显示错误消息。将它绑定(bind)到您的数据源就足够了,它会自动显示错误。
控件的验证事件
如果您没有模型类并且所有验证都应该针对控件进行,最好的选择是使用控件的 Validating
事件。您可以在那里设置 e.Cancel = true
以将控件状态设置为无效。然后您可以防止焦点更改或使用控制状态来获取验证摘要。
在这种情况下,您将使用 ErrorProvider
来显示错误。以这种方式在 Validating
事件中为控件设置错误就足够了:errorProvider1.SetError(control1, "Some Error")
或者您可以设置一个空的错误消息以删除验证错误。
ErrorProvider 组件
在这两种情况下,当您使用数据绑定(bind)或使用 Validating
事件时,如上所述,ErrorProvider
会显示错误图标,并在控件附近显示错误消息的工具提示。 (DataGridView
使用它自己的机制来显示行和单元格的错误,而不使用 ErrorProvider
。)
您还可以使用该组件通过返回每个控件的错误消息的组件的 GetError
方法获取表单的验证摘要。
ValidateChildren 方法和表单的 AutoValidate 属性
您可以使用表单或您的容器控件的ValidateChildren
方法来检查您的控件是否存在验证错误。
根据表单的 AutoValidate
属性的值,它可以防止焦点更改或让焦点从无效控件更改。
关于c# - 验证用户输入/给予 .NET 控件状态 OK 或 NOK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35988786/
我对 Java 很陌生,我尝试了解 Web 服务中的用户异常。 现在,我已将以下示例复制到 Netbeans:http://mprabhat.com/2014/11/03/744/ 我正在使用 jax
我在办公室的一个小型嵌入式 Linux 平台上工作,我必须将默认控制台从 ttyS0 更改为另一个 ttySx。ttyS0 已启用并且是默认控制台。我启用了另一个 ttyS,成功探测到它,我给它设置了
我有一个包含 3 列的数据库。其中一个文件路径名为 path,一个值为 OK 或 NOK,名为 status,另一个包含日期和时间,名为 time。 Path Status D
作为实习的一部分,我必须使用正则表达式来解析日志文件。它是 Java 日志,我在异常检测方面遇到了问题。 事实上,我的正则表达式适用于 Notepad++ 但不适用于 Java (1.6),match
我正在考虑验证用户输入的最佳方式。 让我们想象一些 TextBoxes、CheckBoxes 或您喜欢的任何 .NET 控件,其中用户输入必须被验证为 OK 或 NOK。一旦用户填写了所有必填字段,他
这个问题在这里已经有了答案: 关闭10年前。 Possible Duplicate: Ternary conditional operator in Python 我有这个问题,不知道要问谷歌: (v
我是一名优秀的程序员,十分优秀!