如何避免重复验证事件 Winforms
Posted
技术标签:
【中文标题】如何避免重复验证事件 Winforms【英文标题】:How to avoid duplication of validation events Winforms 【发布时间】:2017-06-02 08:04:15 【问题描述】:我正在创建一个包含三个表单的项目,一个父表单将决定加载哪个表单。由于两个子表单略有相似,因此很多验证是相同的。我有我的验证方法,然后在Validating event
中调用我如何才能最大限度地减少Validating events
中的重复量,并且只有一种方法具有一个验证事件,该方法可以控制我所有共享该方法的控件.
这是我在整个过程中广泛使用的方法的一个示例:
public bool numValidation(string strNum)
if (!string.IsNullOrWhiteSpace(strNum))
int temp;
if (int.TryParse(strNum, out temp))
MessageBox.Show("Phone Number is a valid input: " + temp);
return true;
else
MessageBox.Show(temp + "Is not Valid input!!");
return false;
这只是我的许多验证事件之一:
private void txt_LndLine_Validating(object sender, CancelEventArgs e)
numValidation(txt_LndLine.Text);
txt_LndLine.Clear();
我真的很想知道如何清理代码并最大程度地减少重复。在此先感谢:)
【问题讨论】:
创建一个库项目并将这些常用方法存储在一个静态实用程序类中。并且不要将 UI 元素和逻辑放在这个库中。只需返回 true/false 并让 UI 部分显示消息 谢谢@Steve 所以只需创建静态 utill 类并将我所有的验证方法都放在那里。然后通过创建该类的实例并调用方法来调用它们?还是我应该继承? 或多或少。首先,您不会将所有内容都放在那里,而只是将可以重用的通用代码放在那里,而无需在逻辑上与某种类绑定。其次,如果您的类或方法是静态的,则不需要创建实例。 (对于一个名为 Utility 的类的 IE,您调用了一个名为 numValidation 的静态方法 Utility.numValidation(.....) 如果我必须不包含任何 Ui 元素,我将如何最大限度地减少与 TextBox 相关的验证事件的数量? 这些方法是静态的,因为您没有将它们绑定到特定类的任何特定业务逻辑,并且都在一个名为 Utility 的类中。您不会最小化验证事件。它们属于表单或类的 UI 层。您只是避免将 MessageBox 放在不适合可重用性的实用程序类中(如果您想在某个时候静默失败怎么办?好的,您可以添加一个参数,但这很快就会变得一团糟)。而是将验证结果带到放置 UI 消息的 UI 层。 【参考方案1】:如果您有很多常见的东西,声明式验证可以帮助您清理代码。
MSDN - Extending Windows Forms with a Custom Validation Component Library
您还可以使用同一个 Sub 处理多个控件验证事件,使用帮助类来重用验证计算函数。
最后但同样重要的是,阅读有关 IDataErrorInfo 的信息。使用此接口,您可以将所有验证算法放在您的业务类中。
使用 ErrorProvider 组件和数据绑定在 Winforms 中运行良好
【讨论】:
【参考方案2】:感谢@Steve 解决了更好的代码。通过创建一个单独的静态类并简单地在我所有的Validating Events
中调用该方法来解决,这两个页面都有共同的功能。
private void txt_Fax_Validating(object sender, CancelEventArgs e)
Utillity.numValidation(txt_Fax.Text);
txt_Fax.Clear();
Utility 类如下:
public static bool numValidation(string strNum)
if (!string.IsNullOrWhiteSpace(strNum))
int temp;
if (int.TryParse(strNum, out temp))
Console.WriteLine("Phone Number is a valid input: " + temp);
return true;
else
Console.WriteLine(temp + "Is not Valid input!!");
return false;
【讨论】:
以上是关于如何避免重复验证事件 Winforms的主要内容,如果未能解决你的问题,请参考以下文章
如果托管bean没有更新,如何在事件onblur上使用ajax验证字段[重复]