0

WinForms にエラーが残っている場合にメッセージ ボックスに「データが無効です」と表示する方法。のようなものを試してみましたが、うまくいきません。

if (errorprovider1 == !null)
{
 MessageBox.Show("Data is invalid");
}

たぶん、このソリューションには bool を使用する必要があります。

私の完全なコード:

private void Form1_Load(object sender, EventArgs e)
{
    this.Text = "Formas elementu validācija";
}

    private void textBox1_Validating(object sender, CancelEventArgs e)
    {
        Regex regex1 = new Regex(@"^[a-zA-Z]+$");
        if (!regex1.IsMatch(textBox1.Text))
        {
            errorProvider1.SetError(textBox1, "Nosaukums nedrīskt saturēt ciparus!");
        }
        else
        {
            errorProvider1.Clear();
        }
    }

    private void textBox2_Validating(object sender, CancelEventArgs e)
    {
        Regex regex1 = new Regex(@"^[0-9]+$");
        if (!regex1.IsMatch(textBox2.Text))
        {
            errorProvider2.SetError(textBox2, "Reģ.nur drīkst saturēt TIKAI ciparus!");
        }
        else
        {
            errorProvider2.Clear();
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        // if errorProvider1 is empty (no errors) , show messagebox with text: All data correct.
        // else Data is incorrect.
    }
4

1 に答える 1

3

最初に検証イベントを次のように修正する必要があります。

private void textBox1_Validating(object sender, CancelEventArgs e)
{
    Regex regex1 = new Regex(@"^[a-zA-Z]+$");
    if (!regex1.IsMatch(textBox1.Text))
    {
        //To set validation error
        errorProvider1.SetError(textBox1, "Nosaukums nedrīskt saturēt ciparus!");
        //To say the state of control in invalid
        e.Cancel = true;
    }
    else
    {
        //To clear the validation error
        this.errorProvider1.SetError(this.textBox1, "");
    }
}

次に、ValidateChildrenメソッドを使用して検証エラーがあるかどうかを確認する必要があります。次に、すべてのエラーのリストを取得して、次のようにユーザーに表示できます。

private void button1_Click(object sender, EventArgs e)
{
    if (this.ValidateChildren())
    {
        //Here the form is in valid state
        //Do what you need when the form is valid
    }
    else
    {
        var listOfErrors = this.errorProvider1.ContainerControl.Controls.Cast<Control>()
                               .Select(c => this.errorProvider1.GetError(c))
                               .Where(s => !string.IsNullOrEmpty(s))
                               .ToList();
        MessageBox.Show("Please correct validation errors:\n - " +
            string.Join("\n - ", listOfErrors.ToArray()),
            "Error",  
            MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

サンプルのスクリーンショット:

ここに画像の説明を入力

ノート:

  • Clearコントロールに有効な状態を設定するために、エラー プロバイダーのメソッドを使用しないでくださいSetError。たとえば、 を使用する必要があります。this.errorProvider1.SetError(textBox2, "");
  • e.Cancel=true検証エラーが発生したときに呼び出す必要があります。
  • サンプル コードでは、エラー プロバイダーを含むすべてのコントロールがコンテナー コントロールではなく、フォームに直接配置されていると想定しています。
  • AutoValidateまた、フォームのプロパティをEnableAllowFocusChange設計時に設定するかLoad、フォームのイベントで次のようにコードで設定することにより、フォームの検証動作を変更することをお勧めします。

フォームの検証動作を変更するには:

this.AutoValidate = System.Windows.Forms.AutoValidate.EnableAllowFocusChange;
于 2015-10-12T12:11:33.070 に答える