验证用户输入/为 .NET 控件提供状态 OK 或 NOK

2024-04-18

我正在考虑验证用户输入的最佳方法。

让我们想象一下一些文本框、复选框或您喜欢的任何 .NET 控件,其中必须将用户输入验证为 OK 或 NOK。一旦用户填写了所有必填字段,他就通过按钮提交。

现在我必须知道哪些字段之前被确认为 OK,哪些字段被确认为 NOK。到目前为止,我总是通过为每个控件声明一个全局 bool 变量来告诉我这一点来处理此类情况。但我不喜欢这样...

我很确定一定还有其他方法!我想做的是使用名为 status 或类似的 OK 或 NOK 属性来扩展这些 .NET 控件。你能做到吗?如果是这样,你会怎么做?类似的东西已经存在了吗?

感谢您的答复!


Windows 窗体中有一些有用的功能来执行验证并显示错误消息,包括:

  • 界面
  • 控制事件
  • 成分
  • 方法和形式的性质

使用以上选项:

  • 当您使用数据绑定到模型类时,您可以执行验证。
  • 当您不使用数据绑定时,您可以执行验证。
  • 您可以在处于无效状态的控件附近显示错误消息和错误图标。
  • 您可以决定阻止无效控件的焦点更改或让焦点更改。
  • 您可以显示表单的验证摘要。
  • 您还可以申请Windows 窗体中的数据注释验证 http://www.reza-aghaei.com/dataannotations-validation-attributes-in-windows-forms/

IDataErrorInfo接口

如果您有一些模型类,最适合验证并在 Windows 窗体中提供错误消息的方法是实现IDataErrorInfo。它由数据绑定机制和一些 Windows 窗体控件支持,例如DataGridView and ErrorProvider.

为了简单起见,您可以在类中编写验证规则并使用返回错误消息IDataErrorInfo特性。即使您想应用更高级的场景(例如使用验证引擎),最后最好还是实现IDataErrorInfo以获得与windows窗体最一致的效果。

您将使用一个ErrorProvider显示错误消息。将其绑定到您的数据源就足够了,它会自动显示错误。

验证控件事件

如果您没有模型类并且所有验证都应针对控件完成,则最好的选择是使用Validating控制事件。在那里你可以设置e.Cancel = true设置控制状态为无效。然后,您可以防止焦点更改或使用控制状态来获取验证摘要。

在这种情况下,您将使用ErrorProvider显示错误。为控件设置错误就足够了Validating事件这样:errorProvider1.SetError(control1, "Some Error")或者您可以设置一个空的错误消息来删除验证错误。

错误提供者组件
在这两种情况下,当您使用数据绑定或使用Validating事件,如上所述,ErrorProvider显示错误图标,并带有工具提示,在控件附近显示错误消息。 (DataGridView使用自己的机制来显示行和单元格上的错误,而不使用ErrorProvider.)

您还可以使用该组件来获取表单的验证摘要GetError返回每个控件的错误消息的组件的方法。

表单的 ValidateChildren 方法和 AutoValidate 属性

您可以使用ValidateChildren表单或容器控件的方法来检查控件是否存在验证错误。

基于的价值AutoValidate表单的属性,它可以防止焦点更改或让焦点从无效控件更改。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

验证用户输入/为 .NET 控件提供状态 OK 或 NOK 的相关文章

  • 如何在没有 Control.Invoke() 的情况下从后台线程修改控件属性

    最近 我们遇到了一些旧版 WinForms 应用程序 我们需要更新一些新功能 在专家测试该应用程序时 发现一些旧功能被破坏 无效的跨线程操作 现在 在您认为我是新手之前 我确实有一些 Windows 窗体应用程序的经验 我不是专家 但我认为
  • 使用 Microsoft Graph API 订阅 Outlook 推送通知时出现 400 错误请求错误

    我正在尝试使用 Microsoft Graph API 创建订阅以通过推送通知获取 Outlook 电子邮件 mentions 我在用本文档 https learn microsoft com en us graph api subscri
  • C# 中可空类型是什么?

    当我们必须使用nullable输入 C net 任何人都可以举例说明 可空类型 何时使用可空类型 https web archive org web http broadcast oreilly com 2010 11 understand
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 为什么模板不能位于外部“C”块内?

    这是一个后续问题一个答案 https stackoverflow com questions 4866433 is it possible to typedef a pointer to extern c function type wit
  • 使用安全函数在 C 中将字符串添加到字符串

    我想将文件名复制到字符串并附加 cpt 但我无法使用安全函数 strcat s 来做到这一点 错误 字符串不是空终止的 我确实设置了 0 如何使用安全函数修复此问题 size strlen locatie size nieuw char m
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • 将 System.Windows.Forms.Keys 序列转换为 Char

    有没有办法转换由 Keys 枚举表示的击键序列 即System Windows Forms Keys 在一个字符中 例如 Keys Oem4进而Keys A产生 char 它一定存在于 WinAPI 中的某个地方 因为当我在文本框中按下按键
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • 方法参数内的变量赋值

    我刚刚发现 通过发现错误 你可以这样做 string s 3 int i int TryParse s hello out i returns false 使用赋值的返回值是否合法 Obviously i is but is this th
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • 更改显示的 DPI 缩放大小使 Qt 应用程序的字体大小渲染得更大

    我使用 Qt 创建了一些 GUI 应用程序 我的 GUI 应用程序包含按钮和单选按钮等控件 当我运行应用程序时 按钮内的按钮和字体看起来正常 当我将显示器的 DPI 缩放大小从 100 更改为 150 或 200 时 无论分辨率如何 控件的
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐