1

目前我正在使用如下类来检查我注册到它的表单上的文本框是否都有非空白文本并且工作正常,但是现在我还想在此验证中添加一个组合框,以便当表单上没有注册的文本框和组合框为空白时,应进行验证。所以如果我想在这个类中添加一个组合框,它应该是什么样子的呢?最好的做法是什么?

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));
        }
    }
}
4

1 回答 1

1

我有两个列表设置,将保存所有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);

于 2012-09-20T20:03:01.393 回答