0

ErrorProvider.DisposeWindows フォーム アプリケーションがあり、エラー テキストをクリアするために呼び出しています。ただし、2回目に呼び出すと機能しません(つまり、テキストボックスが空の場合ErrorProviderは表示されますが、テキストボックスに入力して送信ボタンを再度押した後、エラーは表示されません)。

多くのテキストボックスを含むフォームがあり、送信ボタンをクリックした後にフィールドが空かどうかを確認するだけです:

foreach (Control c in this.college.Controls)
{
    if (c is TextBox)
    {
        TextBox textBox = c as TextBox;
        if (textBox.Text.Equals(string.Empty))
        {
            if (string.IsNullOrWhiteSpace(textBox.Text))
            {
                errorProvider1.SetError(textBox, "Field Empty");
            }
            else
            {
                errorProvider1.Dispose();
            }
        }
    }
}
4

3 に答える 3

1

以前のエラー メッセージをクリアすることのみを目的としている場合は、SetError メソッドを再度呼び出し、空の文字列を渡します。

if (string.IsNullOrWhiteSpace(textBox.Text)) 
{ 
    errorProvider1.SetError(textBox, "Field Empty"); 
} 
else 
{ 
    errorProvider1.SetError(textBox, string.Empty); 
} 

Dispose() を呼び出す必要はありません。むしろ、Dispose を呼び出すとエラー プロバイダーが破棄され、フォームの存続期間中は使用できなくなります。

于 2012-07-24T14:15:36.723 に答える
0

あなたのコードが次の行に到達することは決してないと思います

errorProvider1.Dispose()

if文以降

if (textBox.Text.Equals(string.Empty))

2 番目の if ステートメントを作成する

if (string.IsNullOrWhiteSpace(textBox.Text))

使い物にならない。

textBox.Text が空の場合は、null または空白でもあります。

于 2012-07-24T14:18:35.170 に答える
0

エラー プロバイダーで .Dispose() を呼び出したくありません。これは、ガベージ コレクションによって自動的に収集されます。コードはおそらく次のようになります。

   foreach (Control c in this.college.Controls)
    {

        if (c is TextBox)
        {

            TextBox textBox = c as TextBox;


             if (string.IsNullOrWhiteSpace(textBox.Text))
             {
                errorProvider1.SetError(textBox, "Field Empty");
             }
             else
             {
                errorProvider1.SetError(textBox, "");
             }
        }
    }
于 2012-07-24T14:19:30.410 に答える