WinForm UI Validation

1) Just copy and paste this section of code to your project. We're using Reflection so you need to add System.Refelection to your using statements

class Validation  
{  
   
public static bool hasValidationErrors ( System . Windows . Forms . Control . ControlCollection controls )  
   
{  
        bool hasError
= false ;  
 
       
// Now we need to loop through the controls and deterime if any of them have errors  
       
foreach ( Control control in controls )  
       
{  
           
// check the control and see what it returns  
            bool validControl
= IsValid ( control );  
           
// If it's not valid then set the flag and keep going.  We want to get through all  
           
// the validators so they will display on the screen if errorProviders were used.  
           
if (! validControl )  
                hasError
= true ;  
 
           
// If its a container control then it may have children that need to be checked  
           
if ( control . HasChildren )  
           
{  
               
if ( hasValidationErrors ( control . Controls ))  
                    hasError
= true ;  
           
}  
       
}  
       
return hasError ;  
   
}  
 
   
// Here, let's determine if the control has a validating method attached to it  
   
// and if it does, let's execute it and return the result  
   
private static bool IsValid ( object eventSource )  
   
{  
       
string name = "EventValidating" ;  
 
       
Type targetType = eventSource . GetType ();  
 
       
do  
       
{  
           
FieldInfo [] fields = targetType . GetFields (  
                 
BindingFlags . Static |  
                 
BindingFlags . Instance |  
                 
BindingFlags . NonPublic );  
 
           
foreach ( FieldInfo field in fields )  
           
{  
               
if ( field . Name == name )  
               
{  
                   
EventHandlerList eventHandlers = (( EventHandlerList )( eventSource . GetType (). GetProperty ( "Events" ,  
                       
( BindingFlags . FlattenHierarchy |  
                       
( BindingFlags . NonPublic | BindingFlags . Instance ))). GetValue ( eventSource , null )));  
 
                   
Delegate d = eventHandlers [ field . GetValue ( eventSource )];  
 
                   
if ((!( d == null )))  
                   
{  
                       
Delegate [] subscribers = d . GetInvocationList ();  
 
                       
// ok we found the validation event,  let's get the event method and call it  
                       
foreach ( Delegate d1 in subscribers )  
                       
{  
                           
// create the parameters  
                           
object sender = eventSource ;  
                           
CancelEventArgs eventArgs = new CancelEventArgs ();  
                            eventArgs
. Cancel = false ;  
                           
object [] parameters = new object [ 2 ];  
                            parameters
[ 0 ] = sender ;  
                            parameters
[ 1 ] = eventArgs ;  
                           
// call the method  
                            d1
. DynamicInvoke ( parameters );  
                           
// if the validation failed we need to return that failure  
                           
if ( eventArgs . Cancel )  
                               
return false ;  
                           
else  
                               
return true ;  
                       
}  
                   
}  
               
}  
           
}  
 
            targetType
= targetType . BaseType ;  
 
       
} while ( targetType != null );  
 
       
return true ;  
   
}  
 
}  

2) Use the standard Validating event on any control you want to validate. Be Sure to use e.Cancel when the validation fails!

private void txtLastName_Validating(object sender, CancelEventArgs e) 
    { 
        if (txtLastName.Text.Trim() == String.Empty) 
        { 
            errorProvider1.SetError(txtLastName, "Last Name is Required"); 
            e.Cancel = true; 
        } 
        else 
            errorProvider1.SetError(txtLastName, ""); 
    } 

3) Don't skip this step! Set the AutoValidate property on the form to EnableAllowFocusChange. This will allow tabbing to another control even when the validation fails.

4) Finally, in your Submit Button method, call the Validation method and specify what container you want to check. It can be the whole form, or just a container on the form like a Panel or a Group.

private void btnSubmit_Click(object sender, EventArgs e) 
    { 
        // the controls collection can be the whole form or just a panel or group 
        if (Validation.hasValidationErrors(frmMain.Controls)) 
            return; 
 
        // if we get here the validation passed 
        this.close(); 
    } 
http://stackoverflow.com/questions/769184/winform-ui-validation
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值