2011-10-21 9 views
1

としてこのUserControllからのTextBoxのイベントを呼び出すと、二つの成分UserControllと私は、ユーザーコントロールを持っている主なイベント

public System.Windows.Forms.ComboBox innerComboBox; 
public System.Windows.Forms.TextBox innerTextBox; 

を持っており、私は、このユーザーコントロールを使用していたとき、私は

myName.Validation += new System.ComponentModel.CancelEventHandler(myName_Validating); 

becouseようValidatingイベントを呼び出すことはできません働いていない。私はそれを好きにしなければならない。

myName.innerTextBox.Validating += new System.ComponentModel.CancelEventHandler(myName_Validating); 

TextBoxのinnerTextBoxからすべてのイベントが呼び出されるようにUserControllをオーバーライドできますか?ユーザーコントロールで

答えて

2

、このようにそれを追加してみてください:

public new event CancelEventHandler Validating { 
    add { innerTextBox.Validating += value; } 
    remove { innerTextBox.Validating -= value; } 
} 

あなたが望むように次に、あなたのmyName.Validatingが動作するはずです。

+0

ありがとうLarsTech。すぐに試してみる。 – mbrc

2

いいえ、いくつかの方法でそれらを「ラップする」ことができます。つまり、外部ユーザーが登録できるトップレベルユーザーコントロールのイベントを公開してから、内部コントロールのハンドラを購読する必要があります。あなたの最上位の加入者に "知らせる"。たとえば...

public class MyControl 
{ 
    public event CancelEventHandler Validating; 

    public System.Windows.Forms.TextBox innerTextBox; 

    public MyControl() 
    { 
     //post-instantiation stuff here 

     innerTextBox.Validating += myName_Validating; 
    } 

    void myName_Validating(oject sender, CancelEventArgs e) 
    { 
     if (Validating != null) 
     { 
      Validating(sender, e); 
     } 
    } 
} 

正確にどのようにラップするかはあなた次第です。トップレベルのサブスクリプションを公開して実行する前に(スレッドの状況に便利な)コントロールに処理ロジックを追加したい場合は、これが機能します。そうでなければ、LarsTechが示唆するように、より簡潔で実用的なアプローチが可能です。

+0

Mr. Disappointment。ありがとうございます。すぐに試してみる。 – mbrc

関連する問題