1

現在、次のクラスを使用して、登録したフォームのTextBoxに空白以外のテキストがあるかどうかを確認していますが、この検証にComboBoxを追加して次のようにします。フォームに登録されているテキストボックスとコンボボックスのいずれも空白でない場合は、検証を行う必要があります。したがって、このクラスに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));
        }
    }
}
4

1 に答える 1

1

すべてのTextBoxComboBox参照を保持する 2 つのリストを設定しています。検証するときは、登録されているすべてのコントロールをチェックし、それらのいずれかが空の場合は無効になります。また、追加のコントロール タイプをサポートするためにこれを簡単に拡張できることもわかると思います。

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 に答える