• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ユーザコントロールのイベント取得について(C#))

ユーザコントロールのイベント取得について(C#)

このQ&Aのポイント
  • Visual Studio 2005 C# Windows Application 環境でのユーザコントロールのイベント取得方法を教えてください。
  • フォームに自作のユーザコントロールを貼り付けて、テキストボックスのチェンジイベントを取得する方法が分からないのです。
  • ユーザコントロールのテキストボックスに値を入力した時に、フォーム側でイベントを察知して処理をする方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

外部用のdelegateとコントロールで発生するイベント、内部コントロールで発生するイベントの関連付けを行いましょう コントロール側のソースのclass定義の外で   public delegate void ChangeEventHandler(object sender, EventArgs e); といったデリゲートを設置します コントロールのクラス定義の中で // 外部で使うイベント名を定義 ... Changedを使用 public event ChangeEventHander Changed; // 内部で発生したイベントを外部に知らせる protected void OnChange( EventArgs e ) {   // 外部のイベントハンドラが接続されているなら   if ( Changed != null ) {     Changed( this, e )   } } private textBox1_TextChanged(object sender, EventArgs e) {   // 内部のイベントハンドラを呼び出す   OnChaned(e); } といった記述になります 利用する側では デザイナでコントロールを選択してプロパティウィンドウをイベントタブに切り替えて『Changed』ハンドラを追加するか コードで private void OnChanged(object s, EventArgs e) {   MessgeBox.Show("sampel"); } private void Form_Load(object sender, EventArgs e) {   // コントロールのChangedイベントハンドラの設定   UserControl1.Changed += new ChangeEventHandler( OnChanged ) } といった具合にします

6mmruled
質問者

補足

早速のご回答ありがとうございました。 コーディングして動作を確認することができました。 コーディングしていて確認させていただきたいことが出てきたので 教えていただけないでしょうか? 1.ユーザコントロール.テキストボックスの入力値を取得したい場合 (1)public delegate void ChangeEventHandler(object sender, EventArgs e, string inputValue); (2)TextAChanged(this, e,this.textBox1.Text); Changed( this, e ,this.textBox1.Text) (3)private void OnChanged(object s, EventArgs e, string inputValue) とすればようろしいでしょうか?それとも他に良い実装方法があるのでようか? 2.異なる event であっても引数が同じであれば delegate の定義は一つでよろしいでしょうか? 度々の質問申し訳ありません。宜しくお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A