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

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

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

環境: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

  • VB2008でユーザーコントロールのイベントについて

    VB2008でユーザーコントロールのイベントについて 作成したユーザーコントロールを(1)フォームに配置した時のみ実行される (2)フォームを実行した時のみ実行される それぞれ処理を分けたいのですが、適切なイベントが見つかりません。 何か区分けのできる方法はあるのでしょうか? 何方か教えていただけませんか

  • .Net ユーザーコントロールのイベント

    質問させていただきます。 環境はVB.NET2003 WindowsXPです。 あるユーザーコントロール(Form)にボタンが用意されており、そのユーザーコントロールを別のフォームAに貼り付けたとします。 この時、Aのコード内でユーザーコントロール上のボタンのClickイベントを取得する方法がございましたら、回答をよろしくお願いします。

  • VB6 ユーザコントロールでクリックイベント

    コンボボックスにclickイベントを書いたのち(この段階ではprivate) このコントロールをユーザコントロールにしました。 フォーム上に上記のユーザコントロールを配置したところ クリックイベントが発生しません クリックイベントを発生させるには 何か特殊な記述が必要ですか?(例えばオーバライドとか) どうすればクリックイベントを発生させられますか

  • ユーザーコントロールのイベント取得

    いつもお世話になっております。またもや疑問点が出てきましたので、初心者なので皆さんのお知恵を拝借させてください。 VS2005,C#でASP.NET(Web)を作成しています。 まずユーザーコントロール(TextBox)を作成し、Formに貼り付けます。そこで、ユーザーコントロールのイベント(TextChanged)をForm側から取得したいのですがよい方法はありませんでしょうか。

  • keydownイベント

    ユーザーフォーム上に複数のテキストボックスが設置されていて それらに対して同一のkeydownイベントで処理することは可能でしょうか。 keudownイベントの内容は全く同一の処理内容です。 テキストボックスが30個設置されているので一つ一つ書くのが面倒くさくて・・・

  • WEBユーザーコントロール

    ASP.NETで開発をしております。fw2.0です。 WEBユーザーコントロールでDBの読み込み画面AとDBの書き込み画面Bを作ったとします。 WEBフォームにAとBをのっけた場合、Bの書き込み処理が終わった後にAの表示を更新させる にはどうしたらいいのでしょうか? イベントのとり方がわからなくて困っています。 ユーザーコントロールを使わなければ普通にイベントを取れるのですが。。。 出来ればユーザーコントロールを使いたいので WEBフォームでユーザーコントロールのイベントを取る方法があれば教えてください。

  • C# コントロール取得

    C# コントロール取得 選択しているコントロールを取得する方法とかありますでしょうか? VC#2008でアプリケーションを作っています。 例えばテキストボックスのLeave関数などで MessageBox.Show(this.textbox1.Text) みたいにしたいのですが テキストボックスが20個ぐらい必要だとLeave関数を20個作らなくてはいけないので 上記の方法がわかれば1つで済むので是非知りたいです。 自分でも調べてActiveControlを使用してみたのですが反応しません。 MessageBox.Show(this.ActiveControl.Text); としましたが・・ 教えてください

  • ACCESSのイベントで

    こんにちは。 ACCESSのフォームに、テキストボックスと コンボボックスがいくつかあり、 コマンドボタンが1つあります。 コマンドボタンを押す(クリック)すると、 その直前までアクティブだったコントロールの 名前(cmb○○ or txt○○ にしてます)が 知りたいのです。 どうすればよいでしょうか。お願いします。 ちなみに1つのフォームにコントロールが20~30あり、 そういうフォームが30~40こあるので、 そのコントロールに1つ1つイベントを 追加していく(forcusイベント等で変数に代入していく) 方法以外でお願いします。 なにしろ、全部で1000こ近くあるので・・・

  • 変更イベント

    テキストフィールドAとBがあり、どちらか一方でもテキストを変更されると ボタンCのEnabled属性がtrue(デフォルトでfalseに設定している)ようにしたいと考えています。 通常ならば、テキストフィールドAとBのTextChangedイベントに ボタンCのEnabled属性をtrueとするように記述すれば良いだけなのですが 今回、テキストフィールドAとBは汎用的なユーザーコントロールD内に存在しており ボタンCはそのユーザコントロールDを含むフォーム上に存在しています。 つまり、ユーザコントロール上に存在するテキストフィールドが変更された時に フォーム上のボタンのEnabled属性をtrueとしたいのですが テキストフィールドのTextChangedイベントの処理内容にフォームに対する処理を記述すると フォームとユーザコントロールの依存度が高くなるのでそれを避けたいのです。 できればユーザコントロールの内容が変更されたときのイベントを フォーム側で拾えると一番いいかと思うのですが そのようなことは可能でしょうか? あるいは何かいい方法はございますでしょうか?

  • AccessVBA全てのコントロールのイベントを取得したいです。

    AccessVBA全てのコントロールのイベントを取得したいです。 フォーム上にコントロールが20個ほどあります。 現在は抽出ボタンを使用し、抽出実行イベントを行っています。 出来れば、すべてのAfterUpdate()で抽出実行させたいのですが、 コードの書き方がわかりません。 全てのコントロールに対しAfterUpdate()のイベントを書くしか方法はないでしょうか? フォーム内どのコントロールでも抽出実行Functionさせたいです。 ExcelVBAの様にシート内の全てのChangeイベントの様な取得方法はないものでしょうか? ご存じの方がおられましたら、アドバイスよろしくお願いいたします。 m(_ _)m

専門家に質問してみよう