- PR -

インスタンスの上書き

投稿者投稿内容
KKK
大ベテラン
会議室デビュー日: 2003/10/10
投稿数: 119
投稿日時: 2004-04-22 14:49
なちゃさんの書き込み (2004-04-22 10:16) より:
引用:

質問ですが、チェック等のイベントハンドラは、通常のVBのように、ハンドラのメソッドにHandles句で書かれていますか?特に、ハンドラの結び付けをコードで動的にやったりとかはしてないですか?



OKボタンを押したときには、特にイベントハンドラは触っていません。
ただし、そのコントロールのEnter,LeaveイベントはAddHandlerでFormの
ロードイベントに書いています。

(Form_Load)
AddHandler Me.TextBox1.Enter, AddressOf Control_Enter
AddHandler Me.TextBox1.Leave, AddressOf Control_Leave

もしかして、これが原因.....??

引用:

もう一つ、イベントハンドラが呼ばれた際に、ハンドラのsender引数に入っているコントロールへの参照と、Me.TextBox1(だっけか?要はイベントを発生させているコントロール)に入っている参照が同じか異なるかを確認してみてください。



結果は同じでした。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-04-22 17:30
諸農です。

この話題に、かなり興味を持っています。
#KKKさんには申し訳ないんですが。

引用:

KKKさんの書き込み (2004-04-22 14:49) より:

引用:

もう一つ、イベントハンドラが呼ばれた際に、ハンドラのsender引数に入っているコントロールへの参照と、Me.TextBox1(だっけか?要はイベントを発生させているコントロール)に入っている参照が同じか異なるかを確認してみてください。



結果は同じでした。



「同じ」というのは、
A,Bと2つの動的フォームを作成して、Aのフォームのボタンクリックで
引き渡されるsederパラメータがBフォーム上のボタンを指しているという
事でしょうか?
こうなると、イベントのメソッドポインタが間違って登録されているという
次元の話じゃなくなりますね。

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

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-22 17:52
とりあえず、静的にバインドしたのを作りました。

dllコード1
コード:

Imports System
Imports System.ComponentModel

<Serializable(), Description("")> _
Public Class Class1
Public Sub New()

End Sub

Public Sub Open(ByVal form As System.Windows.Forms.Form)
Dim nf As New Form1
nf.MdiParent = form
nf.Show()
End Sub
End Class


dllコード2
コード:

Public Class Form1
Inherits System.Windows.Forms.Form

#Region " Windows フォーム デザイナで生成されたコード "

Public Sub New()
MyBase.New()

' この呼び出しは Windows フォーム デザイナで必要です。
InitializeComponent()

' InitializeComponent() 呼び出しの後に初期化を追加します。
AddHandler Button1.Click, AddressOf Button1_Click
End Sub
(中略)
#End Region

Private Sub Button1_Click(ByVal sender As Object _
, ByVal e As System.EventArgs)
If TextBox1.Text.Length > 0 Then
TextBox1.BackColor = System.Drawing.Color.White
Else
TextBox1.BackColor = System.Drawing.Color.Black
End If
End Sub
End Class


exeコード
コード:

Imports System
Imports System.ComponentModel

Public Class Form1
Inherits System.Windows.Forms.Form

#Region " Windows フォーム デザイナで生成されたコード "
#End Region

Private Sub MenuItem1_Click(ByVal sender As Object _
, ByVal e As System.EventArgs) Handles MenuItem1.Click
Dim a As New ClassLibrary2.Class1
a.Open(Me)
End Sub




これでは、おっしゃるような現象は起きないんですよねぇ...


追記:
現象を確認できる、最小限のコードを載せていただけませんか?regionの中は「フォームには**コントロールと○○コントロールを配置」と書いていただければ、まるまる省いてかまいませんから。

[ メッセージ編集済み 編集者: Jitta 編集日時 2004-04-22 17:58 ]
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-04-22 17:58
引用:

KKKさんの書き込み (2004-04-22 14:49) より:
結果は同じでした。


念のためですが、同じというのはどうやって確認しました?

ちゃんと、参照先が「同一インスタンスである」ということを確認してますよね?
※分かってるよそんなこと!!だったらごめんなさい。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-22 18:14
さらに静的^H^H動的バインドにしてみましたが、やっぱり確認できません。

exeだけ修正
コード:

Private Sub MenuItem1_Click(ByVal sender As Object _
, ByVal e As System.EventArgs) Handles MenuItem1.Click

Dim a As System.Reflection.Assembly
Dim ap As String = System.IO.Path.Combine( _
System.IO.Path.GetDirectoryName(Application.ExecutablePath) _
, "ClassLibrary2.dll")
a = System.Reflection.Assembly.LoadFile(ap)
Dim af As Object = a.CreateInstance("ClassLibrary2.Class1")
af.Open(Me)
End Sub



[ メッセージ編集済み 編集者: Jitta 編集日時 2004-04-22 18:16 ]
KKK
大ベテラン
会議室デビュー日: 2003/10/10
投稿数: 119
投稿日時: 2004-04-23 08:55
簡単なMDI構造のものを、現象がでるプログラムとほぼ同じ条件で
作りました。

しかし今回作ったものは、Jittaさんの言うように各フォーム別々に動くのです。
(つまりAとBという子フォームを立ち上げた場合、AのOKボタンをクリックすると、
AのNULLチェックが走り、BのOKボタンをクリックすると、BのNULLチェックが走ります)

現在、現象の出るプログラムと今回作成したプログラムとの相違点を調査中です。
原因が判明次第、また載せたいと思います。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-04-23 16:59
諸農です。

引用:

KKKさんの書き込み (2004-04-23 08:55) より:

現在、現象の出るプログラムと今回作成したプログラムとの相違点を調査中です。
原因が判明次第、また載せたいと思います。



是非、フィードバックをお願いします。
この問題についてはかなり興味を持っているので、原因をぜひとも知りたいです。


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

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
おむすび君
常連さん
会議室デビュー日: 2005/03/11
投稿数: 29
投稿日時: 2005-10-13 22:09
だいぶ古い投稿みたいですが
これの結論もしくは推測される状況をご存知の方、教えてください。

私はC#でマルチスレッドからリフレクション呼び出しをしているのですが
各スレッドで生成されたクラスのプライベートメンバが上書きされている気がして
???となっているのですが

いまだ再現環境を作れず、この投稿を見つけ、何かヒントにならないかと思っています。。。

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