1

私のUserControlには、TextBoxから継承していないTextBoxがあります。

数値の検証 (数字のみを許可)

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

私はフォームにコードを書きます。今はフォームにコードを書きたくありません。ただし、errorProvider は Form1 のみです。どうすれば知ることができますか。ユーザーは Form1 にコードを書くことはできませんが、Form ErrorProvider は機能します。

4

1 に答える 1

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...
}
于 2013-03-07T13:22:44.573 に答える