CSharp - 所有errorproviders都無法正常工作

  显示原文与译文双语对照的内容
0 0

嗨我正在 Visual Studio 2010 C# 上做我的大學項目。 我有一個WinForms應用程序,它有 8個文本框。 每當用戶離開文本框時,應該彈出錯誤 icon,並且應該顯示一個標籤,顯示錯誤消息。

當我執行下面的代碼時,只有前兩個錯誤提供程序工作。 其他的都沒有出現。

誰能幫我?

private void textBox1_Leave(object sender, EventArgs e)
{
 if (String.IsNullOrEmpty(textBox1.Text))
 {
 errorProvider1.SetError(textBox1,"REQUIRED FIELD");
 label12.Text ="REQUIRED FIELD";
 }
 else
 {
 errorProvider1.Dispose();
 }
 }
 private void textBox2_Leave(object sender, EventArgs e)
 {
 monthCalendar1.Visible = false;
 if (String.IsNullOrEmpty(textBox2.Text))
 {
 errorProvider2.SetError(textBox2,"REQUIRED FIELD");
 label13.Text ="REQUIRED FIELD";
 }
 else
 {
 errorProvider2.Dispose();
 }
 }
 private void textBox3_Leave(object sender, EventArgs e)
 {
 if (textBox3.Text=="")
 {
 errorProvider3.SetError(textBox3,"REQUIRED FIELD");
 label14.Text ="REQUIRED FIELD";
 }
 else
 {
 errorProvider3.Dispose();
 }
 }
 private void textBox4_Leave(object sender, EventArgs e)
 {
 monthCalendar1.Visible = false;
 if (String.IsNullOrEmpty(textBox4.Text))
 {
 errorProvider4.SetError(textBox4,"REQUIRED FIELD");
 label15.Text ="REQUIRED FIELD";
 }
 else
 {
 errorProvider4.SetError(textBox4,"");
 }
 }
 private void textBox5_Leave(object sender, EventArgs e)
 {
 if (String.IsNullOrEmpty(textBox5.Text))
 {
 errorProvider5.SetError(textBox5,"REQUIRED FIELD");
 label16.Text ="REQUIRED FIELD";
 }
 else
 {
 errorProvider5.SetError(textBox5,"");
 }
 }
 private void textBox6_Leave(object sender, EventArgs e)
 {
 monthCalendar2.Visible = false;
 if (String.IsNullOrEmpty(textBox6.Text))
 {
 errorProvider6.SetError(textBox6,"REQUIRED FIELD");
 label17.Text ="REQUIRED FIELD";
 }
 else
 {
 errorProvider6.SetError(textBox6,"");
 }
 }
时间:原作者:1个回答

0 0

只要有人輸入文本框中的文本,就可以釋放錯誤提供程序。 釋放對象釋放所有資源並阻止進一步使用。

使用錯誤提供程序的Clear() 方法代替。 這將清除所有錯誤。 如果只想清除單個錯誤,請設置空文本。

而且通常- 每個表單隻需要一個錯誤提供程序。

private void textBox1_Leave(object sender, EventArgs e)
{
 if (String.IsNullOrEmpty(textBox1.Text))
 {
 errorProvider.SetError(textBox1,"REQUIRED FIELD");
 label12.Text ="REQUIRED FIELD";
 }
 else
 {
 errorProvider.SetError(textBox1, String.Empty);//to clear only the error for this text box
//errorProvider.Clear();//to clear all errors for this provider
 }
}

編輯:提供完全工作示例

這將減少為處理錯誤提供程序。 每當游標離開文本欄位時,該欄位都會檢查內容。 如果為空,則顯示錯誤。 用戶需要返回到欄位,輸入dta並再次離開以清除錯誤。 這基本上就是你在你的例子中定義的需求。 我忘了切換標籤文本,但這似乎不是問題。

要簽出,創建一個新的winform應用程序,並用這裡代碼替換類 Form1. 為了簡潔,我在構造函數中包含了 InitialiseComponent() 代碼,所以 vs 可能不會顯示表單( 至少VS2010沒有正確顯示它) 。

public partial class Form1 : Form
{
 public Form1()
 {
 this.components = new System.ComponentModel.Container();
 this.errorProvider1 = new ErrorProvider(this.components);
 this.textBox1 = new TextBox();
 this.textBox2 = new TextBox();
 ((System.ComponentModel.ISupportInitialize)(this.errorProvider1)).BeginInit();
 this.SuspendLayout();
//
//errorProvider1
//
 this.errorProvider1.ContainerControl = this;
//
//textBox1
//
 this.textBox1.Location = new System.Drawing.Point(42, 25);
 this.textBox1.Name ="textBox1";
 this.textBox1.Size = new System.Drawing.Size(100, 20);
 this.textBox1.TabIndex = 0;
 this.textBox1.Leave += this.textBox1_Leave;
//
//textBox2
//
 this.textBox2.Location = new System.Drawing.Point(42, 52);
 this.textBox2.Name ="textBox2";
 this.textBox2.Size = new System.Drawing.Size(100, 20);
 this.textBox2.TabIndex = 1;
 this.textBox2.Leave += this.textBox2_Leave;
//
//Form1
//
 this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
 this.AutoScaleMode = AutoScaleMode.Font;
 this.ClientSize = new System.Drawing.Size(284, 262);
 this.Controls.Add(this.textBox2);
 this.Controls.Add(this.textBox1);
 this.Name ="Form1";
 this.Text ="Form1";
 ((System.ComponentModel.ISupportInitialize)(this.errorProvider1)).EndInit();
 this.ResumeLayout(false);
 this.PerformLayout();
 }
 private void textBox1_Leave(object sender, System.EventArgs e)
 {
 if (string.IsNullOrEmpty(textBox1.Text)) {
 errorProvider1.SetError(textBox1,"REQUIRED FIELD");
 }
 else {
 errorProvider1.SetError(textBox1, string.Empty);
 }
 }
 private void textBox2_Leave(object sender, System.EventArgs e)
 {
 if (string.IsNullOrEmpty(textBox2.Text))
 {
 errorProvider1.SetError(textBox2,"REQUIRED FIELD");
 }
 else
 {
 errorProvider1.SetError(textBox2, string.Empty);
 }
 }
}
原作者:
...