簡體   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