0

エラー プロバイダーをテキスト ボックスに適用しようとしていますが、

ユーザーは 25 文字を超えて入力することはできません テキストボックスを空白のままにすることはできません

private void txtNameandSurn_TextChanged(object sender, EventArgs e)
{
    txtNameandSurn.MaxLength = 25;

    if (txtNameandSurn.Text == "")
    {
        txtNameandSurn.BackColor = Color.White;
        errorProvider1.SetError(txtNameandSurn, "Cannot be blank!");
    }
    else
    {
        txtNameandSurn.BackColor = Color.Red;
        errorProvider1.SetError(txtNameandSurn, "");
    }

    if (txtNameandSurn.Text.Length >= txtNameandSurn.MaxLength)
    {
        errorProvider1.SetError(txtNameandSurn, "Cannot input more than 25 characters!");
    }
    else if (txtNameandSurn.Text.Length < txtNameandSurn.MaxLength)
    {
        errorProvider1.SetError(txtNameandSurn, "");
    }
}

私が抱えている問題は文字入力に関するもので、エラープロバイダーが表示されますが、別のキーを押すとエラープロバイダーのアイコンが消えますが、文字は入力されません。エラー プロバイダ アイコンを表示し続けるにはどうすればよいですか?

4

2 に答える 2

1

新しいルールを追加する際の読みやすさと柔軟性のために、私はこの構文を好みます。これは、特定のデータ型に対して再利用可能な一連のルールを作成するのにも役立つことに注意してください。このテストされていないコードは、私が理解していれば、errorProvider に関する問題を解決するはずです。

    class Rule 
    { 
        public Func<string, bool> Test { get; set; }
        public string Message { get; set; }
    }

    private void txtNameandSurn_TextChanged(object sender, EventArgs e)
    {
        var rules = new List<Rule>()
        {
            new Rule() { Test = s => !String.IsNullOrEmpty(s), Message="String cannot be blank." },
            new Rule() { Test = s => (s.Length <= txtNameandSurn.MaxLength), Message="String cannot be longer than " + txtNameandSurn.MaxLength },
            new Rule() { Test = s => !s.Contains("#"), Message = "String cannot contain a hash character." }
        };

        var isValid = rules.All(r => r.Test(txtNameandSurn.Text));

        string[] message;
        if (!isValid)
        {
            message = rules.Where(r => r.Test(txtNameandSurn.Text) == false).Select(r => r.Message);
        }

        errorProvider1.SetError((message.Length > 0) ? (string.Join(';', message)) : "");
    }
于 2014-01-18T18:46:20.577 に答える