繁体   English   中英

基于组合框和文本框的表单验证

[英]Form Validation based on both Combo boxes and TextBoxes

目前,我正在使用如下类来检查我注册的表单上的文本框是否都具有非空白文本,并且可以正常工作,但是现在我还想向此验证中添加一个组合框,以便当表单上所有已注册的文本框和组合框都不为空时,应进行验证。 因此,如果我想向此类添加Combobx,它的外观应该如何? 最佳做法是什么?

public class InputValidator
{
    public delegate void ValidationDoneDelegate(bool enable);

    public event ValidationDoneDelegate ValidationDone;

    public void RegisterTextBox(TextBox tb)
    {
        tb.TextChanged += (s, e) => this.Validate(s);
    }

    private void Validate(object sender)
    {
        var t = sender as TextBox;

        if (t == null)
        {
            return;
        }

        var validationDone = ValidationDone;

        if (validationDone != null)
        {
            validationDone(!string.IsNullOrEmpty(t.Text));
        }
    }
}

我有两个列表设置,其中将包含所有TextBoxComboBox引用。 是时候进行验证了,我们将检查所有注册的控件,如果其中任何一个为空,我们将无效。 我认为您还将能够看到如何轻松地扩展它以支持其他控件类型。

public class InputValidator
{
    public delegate void ValidationDoneDelegate(bool enable);

    public event ValidationDoneDelegate ValidationDone;

    private List<TextBox> textBoxes = new List<TextBox>();
    private List<ComboBox> comboBoxes = new List<ComboBox>(); 

    public void RegisterTextBox(TextBox tb)
    {
        tb.TextChanged += (s, e) => this.Validate();
        textBoxes.Add(tb);
    }

    public void RegisterComboBox(ComboBox cb)
    {
        cb.SelectedValueChanged += (s, e) => this.Validate();
        comboBoxes.Add(cb);
    }

    private void Validate()
    {
        bool isValid = true;

        foreach (var tb in textBoxes)
        {
            if (string.IsNullOrEmpty(tb.Text))
                isValid = false;
        }

        if (isValid)
        {
            foreach (var cb in comboBoxes)
            {
                if (cb.SelectedItem == null)
                    isValid = false;
            }
        }

        var validationDone = ValidationDone;

        if (validationDone != null)
        {
            validationDone(isValid);
        }
    }
}

现在,我不确定您认为ComboBox无效输入是什么。 因此,您可能需要调整此行以满足您的需求: isValid = cb.SelectedItem != null; 我估计只要选择了某项,该选择就有效。

编辑:我忘记了将最后一行切换到validationDone(isValid);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM