2013-03-07 64 views
1

在我的用戶我有沒有從文本框繼承一個TextBox,我做了Numerics的一個用戶控件驗證在C#

驗證(即只允許位數)

public delegate void usercontrolError(string message); 
    public event usercontrolError onerror; 

Private void txtLocl_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if(e.KeyChar != '\b') 
    { 
     if(!char.IsDigit(e.KeyChar)) 
     { 
     e.Handled=true; 
     } 
     else 
     { 
     onerror.Invoke("Enter Digits Only"); 
     } 
    } 
} 

表格我寫的以下代碼

public Form1() 
{ 
    txtLocl.onerror += new ciscontrols.mtbDtTmPk.usercontrolError(mtbDtTmPk1_onerror); 
} 

    void mtbDtTmPk1_onerror(string message) 
    { 
     epfrm2.SetError(mtbDtTmPk1, message); 
     //throw new NotImplementedException(); 
    } 

我在窗體中編寫代碼。 現在我不想在Form中編寫任何代碼。但是errorProvider僅在Form1中。我怎麼知道。用戶不能在Form1.But中編寫任何代碼,但表單ErrorProvider將工作。

回答

3

您可以觸發一個事件:

public delegate void CustomTextBoxError(string message); 
public event CustomTextBoxError onError; 

private void txtLocl_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if(e.KeyChar != '\b') 
    { 
     if(char.IsDigit(e.KeyChar)) 
     { 
      e.Handled=true; 
     } 
     else 
     { 
      if (onError != null) 
       onError.Invoke("Enter digits only"); 
     } 
    } 
} 

而在你的形式:

private void MyForm_Load(object sender, EventArgs e) 
{ 
    myUserControl.onError += new CustomTextBoxError(MyForm_onError); 
} 

void MyForm_onError(string message) 
{ 
    //do anything you want in your form... 
} 
+0

它的工作原理我....謝謝...., – 2013-03-07 13:39:57

+0

先生,我不'不想在窗體中寫任何代碼...是否有可能..., – 2013-03-08 08:41:40

+0

但我在我的窗體中有錯誤提供程序..., – 2013-03-08 08:42:09