程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Effective C#原則39:使用.Net驗證(2)

Effective C#原則39:使用.Net驗證(2)

編輯:關於C語言

這和區號匹配,它充許(XXX)或者XXX的形式,其中 XXX是三個數字。任何在數字周圍的空白字符是充許的。最後兩個字符,-和?, 是許可但不要求一個橫線。

剩下的部份用於匹配電話的XXX-XXXX部份。\s匹配任意的空白,\d{3}匹配三個數字,\s*-\s*匹配一個圍繞在數字邊上的空白字符。最後,\d{4}精確匹配4個數字。

windows驗證工作方法小有不同,你 沒有預先的驗證分析。相反,你要寫一個事件句柄到 System.Windows.Forms.Control.Validating事件上,或者,如果你創建了你自 己的控件,重載OnValidating方法(參見原則35)。下面是一個標准的方法:

private void textBoxName_Validating( object sender,
 System.ComponentModel.CancelEventArgs e )
{
 string error = null;
 // Perform your test
 if ( textBoxName.Text.Length == 0 )
 {
  // If the test fails, set the error string
  // and cancel the validation event.
  error = "Please enter a name";
  e.Cancel = true;
 }
 // Update the state of an error provider with
 // the correct error text. Set to null for no
 // error.
 this.errorProviderAll.SetError( textBoxName, error );
}

你有幾個小工作要完成,以確保沒有不合法的輸入愉愉的混過去 了。每一個控件包含一個CausesValidation屬性,這個屬性決定這個控件是否參 與驗證。一般情況,你應該讓所有控件的這一屬性為真,除非是Cancel按鈕。如 果你忘記了,用戶還必須輸出正確的值以後才能取消對話框。第二個小任務是添 加OK句柄來強制驗證所有的控件。驗證只有在用戶訪問和離開控件時觸發。如果 用戶打開了一個窗口,然後馬上點OK,你的所有驗證代碼都不會執行。為了修正 這個,你要添加OK按鈕句柄,來訪問所有的控件,然後強制驗證它們。下面兩個 常規方法顯示了如何正確的完成任務。遞歸方法處理控件以及它所包含的控件: Tab頁面,控件組以及控件面板:

private void buttonOK_Click( object sender,
 System.EventArgs e )
{
 // Validate everyone:
 // Here, this.DialogResult will be set to
 // DialogResult.OK
 ValidateAllChildren( this );
}
private void ValidateAllChildren( Control parent )
{
 // If validation already failed, stop checking.
 if( this.DialogResult == DialogResult.None )
  return;
 // For every control
 foreach( Control c in parent.Controls )
 {
  // Give it focus
  c.Focus( );
  // Try and validate:
  if (!this.Validate( ))
  {
   // when invalid, don't let the dialog close:
    this.DialogResult = DialogResult.None;
   return;
  }
  // Validate children
  ValidateAllChildren( c );
 }
}

這些代碼可以處理大多數情況。一個特殊的快捷應 用就是DataGrid/DataSet的組合。在設計時指定ErrorProvider的DataSource以 及DataMember屬性:

ErrProvider.DataSource = myDataSet;
ErrProvider.DataMember = "Table1";

或者在運行 時,調用BindToDataAndErrors 方法來同時設置:

ErrProvider.BindToDataAndErrors( myDataSet, "Table1" );

錯誤會在設置DataRow.RowError 屬性以 及調用DataRow.SetColumnError 方法時顯示特殊的錯誤。ErrorProvider 會在 DataGrid的原始的行上的特殊單元格裡顯示紅色的警告圖標。

大概的了 解(whirlwind tour)了一下.net框架裡的控件驗證,這可能對你很有幫助,在很 多應用程序中,你都可以創建出你所須要的高效驗證。用戶的輸入不能完全信任 :用戶可能會出現錯誤,而且有時會有一些惡意的用戶試圖破壞你的應用程序。 通過.Net框架已經提供的服務,你可以減少你自己的代碼編寫工作。驗證所有用 戶的輸入,但要使用已經提供了的高效工具。

返回教程目錄

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved