- - PR -
継承元から継承先にあるコントロールのイベント発生
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-04-07 12:55
こんにちわ。くろんすきです。
いつも大変参考にさせていただいています。 ところでWindowsフォームの継承をおこなっているのですが、継承先にある コントロールのイベントを発生させたいのですが可能なのでしょうか? いろいろ試してみているのですが、解りません。よきアドバイスを お願い致します。 以下のようなSystem.Windows.Forms.Formを継承したクラスがあり それを更に継承したクラスの上のコントロールのイベントの事です。 Public Class clsFm Inherits System.Windows.Forms.Form Public Sub ASub 'ここでTextBox1のマウスクリックイベントを発生させたい。 End Sub End class 上記クラスを継承した別フォームがある その中にTextBoxがあり、そのTextBoxのイベントを発生させる。 Public Class clsFm2 Inherits clsFm Private Sub TextBox1_MouseDown(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) _ Handles TextBox1.MouseDown MsgBox("マウスがクリックされました。") End Sub End class 環境は VS2003 VB です。 どうぞよろしくお願い致します。 [ メッセージ編集済み 編集者: くろんすき 編集日時 2005-04-07 13:25 ] [ メッセージ編集済み 編集者: くろんすき 編集日時 2005-04-07 13:47 ] | ||||
|
投稿日時: 2005-04-07 13:24
諸農です。
OnMouseDown()メソッドをpublicにするとか、クラス外部から呼び出せるようにTextBoxから継承した新TextBoxを作って、イベントを呼び出すメソッドを呼べばいいのではないでしょうか? それとも何か別の意図があるのでしょうか? _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||
|
投稿日時: 2005-04-07 13:25
TextBox1が配置されているのは継承先フォームですよね?
であれば、継承元フォームはTextBox1を知らないので、 継承元からTextBox1のイベントを発生させるのは無理です。(当然ですが) | ||||
|
投稿日時: 2005-04-07 13:35
Jubeiさん、kanaiさん、早速ありがとうございます。
すみません。あまり上手な説明ではありませんでした。 実はTextBoxが一つではなく複数ありまして、 できたらActiveControlに対して発生したいのです。 なので発生させる対象コントロールは動的に変更したい。 ということなのです。可能でしょうか…。 Invoke辺りを使用するのかなとおもっているのですが…。 Public Class clsFm Inherits System.Windows.Forms.Form Public Sub ASub 'ここでActiveControlのマウスクリックイベントを発生させたい。 End Sub End class 以上よろしくお願い致します。 | ||||
|
投稿日時: 2005-04-07 13:39
MouseDownはイベントなんですから、素直にMouseDownイベント発生時に呼んで欲しいメソッドを登録してやったらどうです?
VB.NETであればAddHandlerというキーワードを使います。 | ||||
|
投稿日時: 2005-04-07 13:48
こんにちは。
継承元のLoadイベント時に、Controlsの内容を取り出して、MouseDownイベントに関連付けしてみるってのはどうでしょうか?Controlsから取り出したコントロールがTextBoxかどうか、コンテナコントロールで更に子コントロールのTextBoxが無いかとか、ループ処理でまわす必要がありますが。 VB.NETよく分からんために、サンプルコード示せず。。。;; | ||||
|
投稿日時: 2005-04-07 13:56
一郎さんありがとうございます。
clsFmのOnControlAddedをOverridesしてイベントをAddHandlerしてあげ 各イベントを拾うということは解ります。 ただそのあとの処理はあくまでもclsFm2のイベントのコード を実行したいのでclsFm2のイベント発生という風に考えています。 継承元のclsFmの中でclsFm2と同じ事を書かなくて はいけなくなるのでclsFmの中でclsFm2のイベント を発生させてあげたいのです。 説明下手糞ですみませんが、よろしくお願い致します。 [ メッセージ編集済み 編集者: くろんすき 編集日時 2005-04-07 14:00 ] | ||||
|
投稿日時: 2005-04-07 14:14
コントロールのイベントにしなければならない理由が無いなら、仮想メソッドを使えます。 抽象クラスで実装が確定していないメソッドがあるけど、呼び出しだけはしたい、というときに使います。 VB.NETではMustOverrideキーワードを使います。 アプリケーションレベルの処理を記述するなら、その処理だけをイベントプロシジャから分離したほうがいいでしょうね。 個人的には、Formの継承はお勧めできません。デバッグしにくくなりますよ。 _________________ たつごろー http://www.codeseek.net MCSE MCSD.NET、MCDBA、MCSA、MCAD Oracle Master Platinum 9i、Oracle Master Linux+ [ メッセージ編集済み 編集者: たつごろー 編集日時 2005-04-07 14:16 ] |