2010-02-12 86 views
0

我正在寻找一种更好的方式来验证没有字段在窗体中留空,目前这是我的实现,如果你有更好的一个它会受到欢迎,请注意我正在使用KryptonControls。验证表单数据

private bool verify(Control c) 
{ 
    switch (c.GetType().Name) 
    { 
     case "KryptonTextBox": 
      { 
       if (((KryptonTextBox)c).Text == "") 
       { 
        ((KryptonTextBox)c).StateCommon.Border.Color1 = Color.Red; 
        ((KryptonTextBox)c).GotFocus += new EventHandler(ControlGotFocus); 
        return false; 
       } 
      } 
      break; 
     case "KryptonComboBox": 
      { 
       if (((KryptonComboBox)c).SelectedIndex < 0) 
       { 
        ((KryptonComboBox)c).StateCommon.ComboBox.Border.Color1 = Color.Red; 
        ((KryptonComboBox)c).GotFocus += new EventHandler(ControlGotFocus); 
        return false; 
       } 
      } 
      break; 
     case "KryptonDataGridView": 
      { 
       if (((KryptonDataGridView)c).Rows.Count <= 0) 
       { 
        ((KryptonDataGridView)c).StateCommon.HeaderColumn.Border.Color1 = Color.Red; 
        ((KryptonDataGridView)c).GotFocus += new EventHandler(ControlGotFocus); 
        return false; 
       } 
      } 
      break; 
     default:  
      break; 
    } 

    if (c.Controls.Count > 0) 
    { 
     foreach (Control cc in c.Controls) 
     { 
      if (!verify(cc)) 
      { 
       return false; 
      } 
     } 
    } 
    return true; 
} 

因此当用户将焦点设置必须被验证了这一点代码控制下运行:

void ControlGotFocus(object sender, EventArgs e) 
{ 
    switch (sender.GetType().Name) 
    { 
     case "KryptonTextBox": 
      { 
       ((KryptonTextBox)sender).StateCommon.Border.Color1 = Color.Gray; 
      } 
      break; 
     case "KryptonComboBox": 
      { 
       ((KryptonComboBox)sender).StateCommon.ComboBox.Border.Color1 = Color.Gray; 
      } 
      break; 
     case "KryptonDataGridView": 
      { 
       ((KryptonDataGridView)sender).StateCommon.HeaderColumn.Border.Color1 = Color.Black; 
      } 
      break; 
     default: 
      break; 
    } 
} 

回答

1

您可以优化代码是这样的:

switch (c.GetType().Name) { case "KryptonTextBox": } 

到:

TextBox tb = c as TextBox; 
if (tb != null) 
    return string.IsNullOrEmpty(tb.Text); 

ComboBox cb = c as ComboBox; 
if (cb != null) 
    return cb.SelectedIndex < 0; 

etc. 

但我建议给我们这些傀儡的验证人。

+0

这可能会减少行数并提高可读性 – Luiscencio 2010-02-12 18:02:50