- - PR -
VB.NETからC#のFormを継承した際のイベント処理
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-02-13 22:16
はじめまして。
VB.NETからC#で作成したFormを継承して、ボタンのクリックイベント処理を書こうとしたら、以下のビルドエラーが発生しました。 > C:\・・・\aaa.vb(48): HANDLES 句には、WithEvents 変数が必要です。 C#で作成したFormは、System.Windows.Formsから単純に派生したFormで そのForm上にボタン(button1)が1つあるだけです。 そして、VB.NETのソースは自動生成されるままに次のようになっています。 =================================================================== Public Class Test Inherits CSharp.Form #Region " Windows フォーム デザイナで生成されたコード " ・ ・ ・ #End Region Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click End Sub End Class =================================================================== C#とVB.NETのイベントの仕組みに相違があるためでしょうか? 何か回避策があれば教えてください。 宜しくお願いします。 | ||||
|
投稿日時: 2004-02-14 08:43
AddHandlerを使ってください。
| ||||
|
投稿日時: 2004-02-14 18:59
AddHandlerを使う方法以外に、
例えば、 Private WithEvents button1WithEvents As Button といような変数を宣言しておき、 FormのLoadイベントで button1WithEvents = button1 のように代入しておくことで、 Private Sub button1WithEvents _Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1WithEvents .Click End Sub のような形でイベントを処理することができます。 | ||||
|
投稿日時: 2004-02-17 01:23
ご返答、ありがとうございます。
AddHandlerを使う場合でも、使わない場合でも継承元のイベントの指定が 必要になると思うのですが、 C#で作った継承元のフォーム上にあるボタンのClickイベントを 継承する側(VB.NET)で処理させるには、どう指定すればよいのでしょうか? 以下のようにやってみたのですが、Form上でのClickイベントは 受け取ることができましたが、同じForm上にあるボタンのClickイベントは 受け取ることができませんでした。 AddHandler MyBase.Click, AddressOf button1_Click おそらく、MyBase.Click が、FormのClickイベントであることはわかったのですが ボタンのClickイベントはどう指定したらよいのでしょうか? | ||||
|
投稿日時: 2004-02-17 04:02
.NET でのイベントの仕組みについてある程度勉強した方が良いと思います。 MyBaseはFormの派生クラスですから、MyBase.ClickというのはForm.Clickのことです。 # まあ、同名で定義してたりしてってのは置いといて。 ボタンは、MyBase(CSharp.Form)にbutton1というフィールドとして定義されているので、 ボタンのクリックイベントは、MyBase.button1.Clickになります。 といっても、派生クラスからは基底クラスのメンバを直接参照できるので、 単純にbutton1.Clickでも同じです。 | ||||
|
投稿日時: 2004-02-17 10:50
デフォルトだとコントロールを配置しただけの場合の可視性は、 VS.NETでVB.NETではFriend、C#ではprivateじゃありませんでしたっけ? だとすると、CSharp.Formの実装時にプロパティウィンドウでbutton1の可視性を protected internalあたりに変更しておかないと、 継承したクラスからはbutton1の操作はできないと思います。 | ||||
|
投稿日時: 2004-02-18 20:34
以下の通りやってみたら、うまくいきました。
ありがとうございました! AddHandler MyBase.button1.Click, AddressOf button1_Click このような継承元フォームがC#で、それをVB.NETから継承する場合に 今回のイベントの処理以外で留意する点等ありましたら ご教授いただけないでしょうか? 宜しくお願いします。 | ||||
|
投稿日時: 2004-02-19 08:26
C#とVB.NETというより、オブジェクト指向における継承とか暗黙のアクセス限定子に対する知識不足、という感じがしますけど?目的のもの(イベント、プロパティ)がどこにあるのか、そこへたどり着くにはどういった書き方をしなければならないのか、それにアクセスする権限があるのか、そういうところの問題だったように思います。 |
1|2|3
次のページへ»