• 締切済み

コントロールのイベントの透過

VB.net/C# .NET Framework 2.0で開発しております。 いま、Panel等コンテナコントロールの上に子コントロールが乗っているとして、この時子コントロールの指定したイベントが発生した際に、親コンテナの同じイベントを発生させたいと思っていますが、なかなかスマートなやり方が見つからずに悩んでおります。 子配置の際にAddHandler等でごりごりイベントハンドラを指定しまくれば、出来ることはできるのですが…それ以外のやり方としてどんなものがあるのか、知りたくなって質問させていただきました。 GUIの開発においてこういった要望はそれなりにあると思うのですが、皆様はどのようにして解決してらっしゃるのでしょうか? ご教示下さい。

  • i_110
  • お礼率60% (28/46)

みんなの回答

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

そうですね プロパティの変更でそのような動きとなると子コントールの派生クラスを作って親のハンドラを呼ぶようにしないといけないかと 少々趣は違いますが FormクラスのKeyPreviewプロパティのような動きということでしょうか ・・・ WndProcをオーバーライドするか、個々のProtectedイベントで親イベントをコールするような方向かと

  • phoenix343
  • ベストアンサー率15% (296/1946)
回答No.1

同じ処理になるものは関数化しておいて、 全ての同じ処理させるイベント関数でその関数を呼ぶ。 ぐらいにしか思いつきませんが?

i_110
質問者

お礼

ご回答ありがとうございます。説明が悪かったかもしれません。イベントハンドラ割り当ての部分をどうにかして自動化できないか、という点についてお聞きしたいです。例えばリフレクションを活用することによってイベント割り当てを自動化できないかなどと考えてもみましたが、このために実行時負担をかけるのもどうかなと思いまして… つまり実現したいことは、 1.親コンテナの上に子コントロールを配置した状態で 2.子の特定のプロパティを変更する、等の簡単な操作だけで、 3.子のClickイベントが自動的に親のClickイベントハンドラに割り当てられる です。 宜しくお願い致します。

i_110
質問者

補足

すみません、補足を付けるべき所を誤ってお礼をつけてしまいました。

関連するQ&A

  • TabStripコントロールの上にLabelコントロールを乗せるには?

    VB6でTabStripコントロールの上にLabelコントロールを乗せようとしています。 もちろん、コンテナに積んで乗せてやれば乗ることはわかっていますが、コンテナに積まず直接乗せようとすると乗りません。配置した後に最前面を指定しても最前面に出てきません。 FrameなどのコンテナのBorderStyleを無にしてFrameに積んでTabStripに配置するという方法はとりたくありません。 TextBoxやChkeckBoxなどのコントロールは直接乗るのにLabelは乗りません。 これはVB6の仕様なのでしょうか、若しくはコンテナに積まず乗せる方法がほかにあるのでしょうか。

  • 別コントロールのサーバ側イベントに来てしまう

    ASP.NET4.0で、WEBシステムを開発しています。 デスクトップアプリの経験はありますが、WEBの経験はあまりないです。 TextBoxのTextChangedイベントハンドラを作成し、AutoPostBack=trueにして、 サーバ側で処理するようにしているのですが、その際、なぜかその近くに配置している ボタンのClickイベントハンドラにも来てしまっています。 VisualStudio2010でデバックして発覚しました。 それぞれ、別々のUpdatePanelで囲っています(UpdateMode=Conditional)。 PostBack時、押してもいないボタンのClickイベントに来てしまうようなことがあるのでしょうか。 (Enterキー押下で何か発生している?) UpdatePanelを使ってページを作成する際、注意点などはありますでしょうか。 よろしくお願いします。

  • 実行時にコントロールのイベントの登録/解除を、イベントハンドラのメソッドをあらかじめ知っていないロジックから実施する方法

    実行時にコントロールのイベントの登録/解除を、イベントハンドラのメソッドをあらかじめ知っていないロジックから実施する方法 通常、実行時にコントロールにイベントの登録/解除 を行う際は。 AddHandler 対象コントロール.イベント名, AddressOf メソッド RemoveHandler 対象コントロール.イベント名, AddressOf メソッド や AddHandler 対象コントロール.イベント名, メソッドのデリゲート型 RemoveHandler 対象コントロール.イベント名, メソッドのデリゲート型 を行うと思います。 しかし、この方法では、これを実施するロジックが AddressOf メソッド や メソッドのデリゲート型 を知っていなければなりません。 そうではなく、それをあらかじめ、知っていなくても 対象コントロール から AddressOf メソッド や メソッドのデリゲート型 に該当するオブジェクトを取得するなどして、 実施できる方法を教えてください。 言語は、.NET系であれば。。 VB.NET, C#, C++のいづれかでもよいです。 できさえすればよいです。 J#とか、Delphi.NETとかマイナーなのは、厳しいです。 なお、C++でもしできるのであれば。 2003のマネージC++と、 2005のC++/CLIの両方について知りたいです。 以上、よろしくお願いします。

  • コントロールのイベントについて

    はじめまして。 質問させて下さい。 VC++ 2005 MFC で開発しております。 ソースレベルでコントロールの押下を実装できるでしょうか? なかなか説明が難しいのですが、 OnBnClick...()のような イベントハンドラを呼び出すのではなく、 実際にボタンが押下された時と同等のトリガー的な動作を 擬似的にさせたいと考えております。 どなたかお詳しい方がおりましたら、 ご教授のほど宜しくお願いいたします。

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

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

  • DateTimePickerにイベント追加したい

    VB.net2008で開発しています。 DateTimePickerを画面に貼り付けて使用しているのですがイベントにダブルクリックがありません。 画面に配置したコントロールにイベントを追加することってできますか? ご教授のほどよろしくお願い致します。

  • イベントにAddHandlerされているか判断

    現在VB2010にてコントロールを作成しているのですが、 外部公開しているイベントに (コントロール利用側プログラムで)AddHandlerが 行われているかどうか判断する必要がでてしまいました。 どのようにすれば実装可能でしょうか? よろしくお願いします。

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

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

  • ASP.NETのメニューコントロール

    開発環境 ・Windows XP ・Framework4.0 ・VB.NET マスターページに横長のメニューコントロールを配置したアプリを作成しています。 javascriptでアラートメッセージを表示すると、 メニューコントロールが領域いっぱいに広がってレイアウトが崩れてしまいます。 回避策があれば、ご回答お願いします。

  • ユーザーコントロールのコンテナ

    VB6から.NETへ移行したばかりの初心者です。 早速質問ですがVB6でユーザーコントロールを作成し「ControlContainer」プロパティを設定するとユーザーコントロールがコンテナ化する事ができたのですが.NETからプロパティが見当たらなくユーザーコントロールをコンテナ化することができません。 他の名前に変わっているのか、もしくは出来ないのか?!どなたかわかる方がいましたら助けてください。 宜しくお願い致します。 開発環境は「VisualBasic 2005 ExpressEdition」です。

専門家に質問してみよう