- PR -

継承元から継承先にあるコントロールのイベント発生

投稿者投稿内容
くろんすき
会議室デビュー日: 2004/04/06
投稿数: 14
投稿日時: 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 ]
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2005-04-07 13:24
諸農です。

OnMouseDown()メソッドをpublicにするとか、クラス外部から呼び出せるようにTextBoxから継承した新TextBoxを作って、イベントを呼び出すメソッドを呼べばいいのではないでしょうか?

それとも何か別の意図があるのでしょうか?

_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
kanai
ベテラン
会議室デビュー日: 2004/09/13
投稿数: 98
投稿日時: 2005-04-07 13:25
TextBox1が配置されているのは継承先フォームですよね?
であれば、継承元フォームはTextBox1を知らないので、
継承元からTextBox1のイベントを発生させるのは無理です。(当然ですが)
くろんすき
会議室デビュー日: 2004/04/06
投稿数: 14
投稿日時: 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

以上よろしくお願い致します。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2005-04-07 13:39
MouseDownはイベントなんですから、素直にMouseDownイベント発生時に呼んで欲しいメソッドを登録してやったらどうです?
VB.NETであればAddHandlerというキーワードを使います。
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2005-04-07 13:48
こんにちは。

継承元のLoadイベント時に、Controlsの内容を取り出して、MouseDownイベントに関連付けしてみるってのはどうでしょうか?Controlsから取り出したコントロールがTextBoxかどうか、コンテナコントロールで更に子コントロールのTextBoxが無いかとか、ループ処理でまわす必要がありますが。

VB.NETよく分からんために、サンプルコード示せず。。。;;
くろんすき
会議室デビュー日: 2004/04/06
投稿数: 14
投稿日時: 2005-04-07 13:56
一郎さんありがとうございます。
clsFmのOnControlAddedをOverridesしてイベントをAddHandlerしてあげ
各イベントを拾うということは解ります。

ただそのあとの処理はあくまでもclsFm2のイベントのコード
を実行したいのでclsFm2のイベント発生という風に考えています。

継承元のclsFmの中でclsFm2と同じ事を書かなくて
はいけなくなるのでclsFmの中でclsFm2のイベント
を発生させてあげたいのです。

説明下手糞ですみませんが、よろしくお願い致します。


[ メッセージ編集済み 編集者: くろんすき 編集日時 2005-04-07 14:00 ]
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2005-04-07 14:14
引用:

継承元のclsFmの中でclsFm2と同じ事を書かなくて
はいけなくなるのでclsFmの中でclsFm2のイベント
を発生させてあげたいのです。


コントロールのイベントにしなければならない理由が無いなら、仮想メソッドを使えます。
抽象クラスで実装が確定していないメソッドがあるけど、呼び出しだけはしたい、というときに使います。
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 ]

スキルアップ/キャリアアップ(JOB@IT)