0

TextBoxes私のプロジェクトでは、同じイベントに次のようなものを与えている内部がたくさんありますTabControl:(作業中)

私のフォームコンストラクターでは:

    SetProperty(this);

private void SetProperty(Control ctr)
{
    foreach (Control control in ctr.Controls)
    {
        if (control is TextBox)  
        {
            control.TextChanged += new EventHandler(ValidateText);
        }
        else
        {
           if (control.HasChildren) 
           {
               SetProperty(control);  //Recursive function if the control is nested
           }
        }
    }
}

今、すべての TextBoxes に TextChanged イベントを与えようとしています。このようなもの:

    private void ValidateText(object sender,EventArgs e)
    {
        String strpattern = @"^[a-zA-Z][a-zA-Z0-9\'\' ']{1,20}$"; //Pattern is Ok
        Regex regex = new Regex(strpattern);  
        //What should I write here?             
    }

考慮すべきテキストボックスが1つもないため、上記の方法で何を書くべきかわかりません。提案してください。

編集:私が言及したパターンは TextBoxes に許可されるべきではありません。つまり、テキストは一致する文字列に自動的に変換される必要があります。(パターンで言及した文字を禁止する必要があります)。

4

2 に答える 2

3

最初に呼び出しの参照を取得する必要があります。次に、検証のために正規表現TextBoxを照合して、必要な決定を下すことができます。

private void ValidateText(object sender, EventArgs e)
{
    TextBox txtBox = sender as TextBox;
    String strpattern = @"^[a-zA-Z][a-zA-Z0-9\'\' ']{1,20}$"; //Pattern is Ok
    Regex regex = new Regex(strpattern);
    if (!regex.Match(txtBox.Text).Success)
    {
        // passed
    }
}

ADDED、イベントをフックすることをお勧めします。一度Validatingにすべての検証を実行したいときはいつでもこのイベントを呼び出すことができます。TextBoxes

private void SetProperty(Control ctr)
{
    foreach (Control control in ctr.Controls)
    {
        if (control is TextBox)
        {
            control.Validating += ValidateText;
        }
        else
        {
            if (control.HasChildren)
            {
                SetProperty(control);  //Recursive function if the control is nested
            }
        }
    }
}

private void ValidateText(object sender, CancelEventArgs e)
{
    TextBox txtBox = sender as TextBox;
    String strpattern = @"^[a-zA-Z][a-zA-Z0-9\'\' ']{1,20}$"; //Pattern is Ok
    Regex regex = new Regex(strpattern);
    //What should I write here?
    if (!regex.Match(txtBox.Text).Success)
    {
        e.Cancel = true;
    }
    e.Cancel = false;
}

検証を実行するには、次のメソッドを呼び出します。

bool isValid = !this.ValidateChildren(ValidationConstraints.Enabled);

参考文献:

  1. Textbox コントロールを拡張して正規表現に対して検証する
  2. Windows フォームでの検証
于 2012-11-15T05:05:43.767 に答える