2011-11-22 67 views
0

我试图检查在窗体用户窗体中所有需要的信息是否在执行完代码之前完成。检查Windows窗体完成

是否有任何建议检查窗体窗体是否已完成的方法?

看来,如果我列出每个控件,然后检查它,我的代码看起来臃肿,因为它继续为约40控件。

例如

if(!check_1(varX_TextBox)) 
    return false; 

if(!check_2(varY_ComboBox)) 
    return false; 

... 

if(!check_40(varAA_numericUpDown)) 
    return false; 
+0

你是什么意思的“我想检查一个Windows用户表单中的所有需要​​的信息是否完整”。你在说什么?你是否在谈论表单中所有控件的加载?请解释! –

+0

大多数表格都是静态的,所以默认会加载。我需要知道它们是否包含TextBox或ComboBox的文本(例如TexBox.Text!=“”),如果它是一个TickBox等已被检查。 –

回答

2

有许多不同的方式来实现这一点,它最终会归结为您自己的个人喜好,你使用。也就是说,以Windows Forms开始的两个好地方是属于Windows Forms框架(请参阅here)和企业库Validation Application Block的验证事件。

验证事件ValidatingValidated为您提供挂钩以干净地插入您的控件验证,并且大多数Windows窗体控件都完全与此框架集成。您可以在各种时间触发此验证(例如表单关闭或控件失去焦点时)。

如果您在设计中使用域模型,则验证应用程序块非常有用。它允许您用验证要求修饰类的属性,然后提供帮助验证这些类和报告任何错误的类。

+0

完美,谢谢 –

0

您可以用Win-表单验证控件,或者执行一些其他验证机制,例如在您的视图模型(主持人)实现IDataErrorInfo的。

2

正如建议的其他解决方案,你可以去与他们或者你可以使你的自定义功能作为您的要求。

让我举个例子。
假设表单中包含15个以上的文本框,其中10个是必需的。因此,在中设置一条消息文本框的标记属性就像“需要xyz字段”

现在就提交表单,你可以调用像下面

foreach (Control c in this.Controls) 
    { 
     //All text boxes validate in one if statement 
     if (c is TextBox && c.Tag.ToString() != string.Empty) 
     { 
      MessageBox.Show(c.Tag.ToString()); 
     } 
    } 

这是可以覆盖所有像组合框,复选框等其他类型的控件..
现在对你如何使用验证只是例子。但你也可以这样做,

0
  1. 一种方法是创建一个验证类,它包含所有需要检查的属性。当用户更改文本框或复选框等时更改该类的属性,然后在类中查找更改。您需要两种状态,即有效状态和已更改状态,并始终将已更改状态与有效状态进行比较。如果两种状态都相同,则意味着表单上的所有验证和检查都符合您的要求。
0

围绕你想要做的事情没有其他'魔术'的方法。每个领域,如果有其要求,将有它的代码片段,该领域的验证。

你就可以选择从是关于如何“添加”选项什么是验证剪断到外地:

每个控制
  • 定时器
    • OnValidate事件,将检查所有的在窗体上的控件,每个都有自己的片段
    • OnChange事件每个控制
    • OnOK事件表单上的“接受”按钮,即会在每个控制和验证它

    我最喜欢的是以上都不是,因为我非常注重绑定,所以我有一个我的数据类,将该类绑定到窗体控件,并在'接受'按钮上让我的类数据验证。