小编典典

WinForm UI验证

c#

我需要在整个Winform应用程序中实施输入验证。可以输入数据的表单有很多不同,我不希望通过表单逐个控制地创建每个项目的isValid等。别人如何处理呢?

我看到大多数相关文章都涉及Web Apps和/或提到了Enterprise Library Validation Application
Block
。现在,我承认我还没有对ELVAB进行彻底的研究,但是对于我所需要的东西 似乎
有些过头了。我目前的想法是编写具有各种要求的类库,并将控件作为参数传递给它。我已经有一个RegEx函数库来处理 isValidZipCode之
类的东西,因此这可能是我开始的地方。

我想要的是一个Validate按钮,该按钮onClick循环浏览该表单页面上的所有控件并执行所需的验证。我该怎么做?


阅读 351

收藏
2020-05-19

共1个答案

小编典典

在我自己的应用程序中,我需要验证键入的维度。我使用的顺序如下

  1. 用户选择或键入,然后离开控件。
  2. 该控件失去焦点,并通知View发送其ID和条目文本。
  3. 视图检查哪个Shape程序(实现接口的类)创建了Form,并向其传递ID和输入文本
  4. Shape程序返回响应。
  5. 如果“响应”正确,则视图将更新形状类的正确条目。
  6. 如果响应是正确的,则视图通过界面告诉表单可以将焦点转移到下一个条目。
  7. 如果“响应”不正确,则视图将查看响应,并使用“表单界面”告知表单要执行的操作。这通常意味着焦点会移回到有问题的条目,并显示一条消息,告诉用户发生了什么。

这种方法的优点是,对于给定的Shape
Program,验证集中在一个位置。我不必去修改每个控件,甚至不必担心表单上控件的不同类型。早在设计软件时,我就决定了UI如何用于文本框,列表框,组合框等。不同级别的严重性也有不同的处理方式。

视图负责通过接口指示表单做什么。它的实际实现方式由Form本身在Interface的实现中处理。视图并不在乎表单是显示黄色表示警告,还是显示红色表示错误。只有它可以处理这两个级别。稍后,如果出现了更好的显示警告与错误的提示,我可以在窗体本身中进行更改,而不必考虑使用View逻辑或Shape
Program中的validate。

如果您正在考虑制作一个类来保存验证逻辑,那么您已经到了一半,这将为您提供新设计的其余方法。

2020-05-19