■74905 / inTopicNo.3) |
Re[2]: 複数Class間のイベントの捕捉について |
□投稿者/ あい (2回)-(2015/02/09(Mon) 00:07:52)
|
■No74899 (Azulean さん) に返信
Azulean さん、ご回答ありがとうございます。
> クラスやオブジェクト・インスタンスの概念を学んでいただいた方がよいのですが、どうしても今すぐこの場を切り抜けたいのであれば、Shared も手でしょうね。 > ただし、Shared を多用すると後で痛い目を見ます。そのことは覚えておいてください。 > http://www.atmarkit.co.jp/fdotnet/vb6tonet/vb6tonet10/vb6tonet10_02.html その場しのぎでの対応は取りたくありませんので、1から勉強します!
下記のような場合でButton2.click時にメッセージが発生しないのですが、不要な書き方をしていますでしょうか・・・?
Public Class Form1 Dim NEvent as New Event1 Dim WithEvents tEvent As New Event1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load NEvent.A() End Sub Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing NEvent.B() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click tEvent.DoEvent() End Sub Private Sub InstanceEvent(ByVal sender As Object, ByVal e As System.EventArgs) Handles tEvent.TestEvent MsgBox("test") End Sub End Class
Public Class Event1 Public Event TestEvent(ByVal sender As Object, ByVal e As EventArgs) Public Sub DoEvent() RaiseEvent TestEvent(Me, New EventArgs) End Sub Public Sub A() AddHandler Button2.Click, AddressOf DoEvent End Sub Public Sub B() ' End Sub Public Sub C() ' End Sub End Class
> 2015/02/07(Sat) 11:38:52 編集(投稿者) > > ■No74898 (あい さん) に返信 >>Form1からEvent1のDoEventを実行した場合はメッセージ"test"が表示されます。 >>ところが、Event1内でDoEventが実行された際はForm1でメッセージ"test"が表示されません。 >> >>Event1内からRaiseEventが実行された際にForm1にてイベントを捕捉するにはどうすれば良いのでしょうか? >>なお、前提条件としてEvent1はForm1だけでなく他のClassからでも呼べるように設定したいと考えています。 > > 他のクラスでも tEvent を As New Event1 として作っていませんか? > > Event1 はクラスであり、そのクラスのインスタンスは複数作ることができます。 > DoEvent メソッドや TestEvent イベントはインスタンスごとの存在なので、Form1 が知っているインスタンスと他のクラスが知っているインスタンスが異なるのであれば、連動することはありません。 > 同じインスタンスを共有できるようにすることが必要になります。 > > > クラスやオブジェクト・インスタンスの概念を学んでいただいた方がよいのですが、どうしても今すぐこの場を切り抜けたいのであれば、Shared も手でしょうね。 > ただし、Shared を多用すると後で痛い目を見ます。そのことは覚えておいてください。 > http://www.atmarkit.co.jp/fdotnet/vb6tonet/vb6tonet10/vb6tonet10_02.html
|
|