2009-06-03 16 views
23

こんにちは。私は、テキストボックスを含むUserControlを持っています。テキストボックスのtextchangedイベントにアクセスしたいのですが、usercontrolのイベントプロパティでは、テキストボックスのイベントは表示されません。 C#で公開されている公開されているWinformsのUserControlから子コントロールの特定のイベントを公開して処理するにはどうすればよいですか。cでユーザコントロール内の子コントロールのイベントを公開して発生させます。

答えて

36

あなたは新しいイベントを表面化し、必要であれば、ストレート制御に至るまでの任意のサブスクリプションを渡すことができます。

public class UserControl1 : UserControl 
{ 
    // private Button saveButton; 

    public event EventHandler SaveButtonClick 
    { 
     add { saveButton.Click += value; } 
     remove { saveButton.Click -= value; } 
    } 
} 
+0

素晴らしいこと!私は明示的にイベントハンドラを追加することで、私は何か同様のことをしました。私は子コントロールを公開してユーザコントロールを介して公開していました。あなたの提案はそれのちょっとした方法です!ありがとう! –

+11

この優秀さにもかかわらず、このソリューションには大きな欠点があります:ハンドラに渡される 'sender'引数はUserControlではなくButtonになります...これにより、コントロールのいくつかのインスタンスに対して同じハンドラを使用することができなくなります –

+0

この仕事をするために何か他に?何らかの理由で、宣言的に追加されたイベントハンドラが機能しない – Nap

1

TextBox全体をユーザーコントロールのパブリックプロパティとして公開し、必要に応じてイベントに登録します。
例:

theUserControl.MyText.WhatEverEvent += ... 

・ホープ、このことができます:あなたがそうのようなそのイベントのいずれかに加入することができ、これを行った後

class myUserControl: UserControl { 
private TextBox _myText; 
public TextBox MyText { get {return _myText; } } 

}

+0

おかげで、私は今のと同様の事を行っていました。上に提供されたエレガントなソリューションをお探しでした。ご協力ありがとうございます。+ 1 –

関連する問題