简体   繁体   English

c#中的UserControl验证

[英]UserControl Validation in c#

In my UserControl i have a TextBox Which is not inheriting from TextBox, i am doing a 在我的UserControl中,我有一个TextBox,它不是继承自TextBox,我正在做一个

validation for Numerics (which allows only Digits) Numerics验证(仅允许数字)

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");
       }
    }
}

in Form i write the following code 在表单中我写下面的代码

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

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

i write the code in Form. 我在表单中编写代码。 now i don't want to write any code in Form. 现在我不想在Form中编写任何代码。 But errorProvider is in Form1 only. 但errorProvider仅在Form1中。 How can i do Know. 我怎么知道。 User cann't write any code in Form1.But Form ErrorProvider will work. 用户无法在Form1中编写任何代码。但是Form ErrorProvider可以正常工作。

You can fire a event: 你可以发射一个事件:

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");
        }
    }
}

And in your form: 并以您的形式:

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...
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM