2015-05-19 57 views
-1

這裏是我的情況:我有一個TabControl三個TabPage的(tabPage1 & tabPage2 & tabPage3)。在每一頁我有一個8 - 10 textbox。我如何爲textbox, combobox, datetimepicker - 在Windows窗體應用程序中進行驗證? enter image description here驗證的文本框的標籤頁

這是我的表單應用程序

+0

[Winforms中的字段驗證](http:// stackoverflow。com/questions/3573302/fields-validation-in-winforms) – Shaharyar

+0

我需要一個驗證中所有行的短代碼。不分隔每行 – Cristina

+0

你需要什麼驗證?這是所有控件的「必需字段驗證」嗎? – Shaharyar

回答

1

您可以使用ControlValidating事件與ErrorProvider

我創建了一個示例應用程序。

它有2頁的選項卡控件:

  • TabPage1
    • TextBox2中
    • textbox3
    • textbox4
    • textbox5
    • combobox1
    • combobox2
    • combobox3
    • datetimepicker1
  • TabPage2
    • TextBox1中

enter image description here

從工具箱添加ErrorProvider控制到form

form的構造,訂閱驗證事件的所有控件:

textBox1.Validating += textBox_Validating; 
textBox2.Validating += textBox_Validating; 
textBox3.Validating += textBox_Validating; 
textBox4.Validating += textBox_Validating; 
textBox5.Validating += textBox_Validating; 

comboBox1.Validating += comboBox_Validating; 
comboBox2.Validating += comboBox_Validating; 
comboBox3.Validating += comboBox_Validating; 

dateTimePicker1.Validating += dateTimePicker1_Validating; 

下面是檢查空值的事件:

bool IsValidated = true; //will be checked on button click 
void dateTimePicker1_Validating(object sender, CancelEventArgs e) 
{ 
    DateTimePicker datetimepicker = sender as DateTimePicker; 
    if (datetimepicker.Value == null) 
    { 
     errorProvider1.SetError(datetimepicker, "Required"); 
     IsValidated = false; 
    } 
} 

void comboBox_Validating(object sender, CancelEventArgs e) 
{ 
    ComboBox combo = sender as ComboBox; 
    if(combo.SelectedIndex == -1) 
    { 
     errorProvider1.SetError(combo, "Required"); 
     IsValidated = false; 
    } 
} 

void textBox_Validating(object sender, CancelEventArgs e) 
{ 
    TextBox txtbox = sender as TextBox; 
    if (txtbox.Text == "" || txtbox.Text.Length > 2) 
    { 
     errorProvider1.SetError(txtbox, "Required"); 
     IsValidated = false; 
    } 
} 

Validating事件觸發,當你從失去焦點任何控制,但如果有人直接點擊Submit按鈕怎麼辦?

爲了解決這個問題,你也可以驗證所有的控制按鈕點擊所有選項卡:

private void btnSubmit_Click(object sender, EventArgs e) 
{ 
    //traverse all Tab Pages 
    foreach (TabPage tabpage in tabControl1.Controls.OfType<TabPage>()) 
    { 
     foreach (TextBox txtbox in tabpage.Controls.OfType<TextBox>()) 
      textBox_Validating(txtbox, null); 

     foreach (ComboBox combo in tabpage.Controls.OfType<ComboBox>()) 
      comboBox_Validating(combo, null); 

     foreach (DateTimePicker date in tabpage.Controls.OfType<DateTimePicker>()) 
      dateTimePicker1_Validating(date, null); 
    } 

    if (IsValidated) 
     MessageBox.Show("submitted"); 
    else 
     MessageBox.Show("not submitted"); 
} 

它會顯示對每個控制誤差(見以下快照)並不會提交表單。 enter image description here

+0

感謝您的代碼,但我也做到了。我希望其他方法不使用提供者錯誤,但顯示文本(無消息框)和代碼中的錯誤必須檢查所有空白空間並且至少有3個字母必須是單個命令。不是每行都分開。對於所有的隊伍整體。 – Cristina

+0

你有我的想法? – Cristina

+0

那麼你可以檢查'textbox_validating'事件句柄中的空格。在我檢查空字符串的地方,你可以檢查你想驗證的任何條件。當向用戶顯示一條消息時,您可以附加一個帶控件的「tooltip」來顯示消息。 – Shaharyar