代码之家  ›  专栏  ›  技术社区  ›  Luiscencio

正在验证表单数据

  •  0
  • Luiscencio  · 技术社区  · 15 年前

    我正在寻找一种更好的方法来验证表单中没有空白字段,目前这是我的实现,如果您有更好的字段,它将受到欢迎,注意我正在使用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;
        }
    }
    
    2 回复  |  直到 15 年前
        1
  •  1
  •   sashaeve    15 年前

    您可以这样优化代码:

    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.
    

    但我建议对这些蛹使用验证器。

        2
  •  1
  •   Mark W    15 年前

    我推荐Deborah Kurata编写的验证类, http://msmvps.com/blogs/deborahk/archive/2009/07/16/validation-class.aspx 这真的帮助我验证了一个包含大量文本框的表单。