DOBON.NET DOBON.NETプログラミング掲示板過去ログ

新たに追加したFromのオブジェクト参照について

環境/言語:[Windows XP/VB.NET,]
分類:[.NET]

formを新規に追加し、モジュールから新規に追加したフォームのオブジェクトにデータをセットする時に、セットされません。

ロジックは正常に処理されるのですが、デバッグしオブジェクトの中身を見ると
セットされていません。

新たにフォームを追加した場合、なにか追加するロジック等はあるのでしょうか?

既存のフォームを新たに追加したフォームの違いを調べると、フォーム内のロジックの先頭の方に

Private Shared m_vb6FormDefInstance As frmMain
Private Shared m_InitializingDefInstance As Boolean

Public Shared Property DefInstance() As frmMain

Get
If m_vb6FormDefInstance Is Nothing OrElse m_vb6FormDefInstance.IsDisposed Then
m_InitializingDefInstance = True
m_vb6FormDefInstance = New frmMain
m_InitializingDefInstance = False
End If
DefInstance = m_vb6FormDefInstance
End Get
Set(ByVal Value As frmMain)
m_vb6FormDefInstance = Value
End Set

End Property

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

Public Sub New()

MyBase.New()
If m_vb6FormDefInstance Is Nothing Then
If m_InitializingDefInstance Then
m_vb6FormDefInstance = Me
Else
Try
'スタートアップ フォームについては、最初に作成されたインスタンスが既定インスタンスになります。
If System.Reflection.Assembly.GetExecutingAssembly.EntryPoint.DeclaringType Is Me.GetType Then
m_vb6FormDefInstance = Me
End If
Catch
End Try
End If
End If
'この呼び出しは、Windows フォーム デザイナで必要です。
InitializeComponent()

End Sub

が記述してありました。これは最初からm記述してあったように思います。
新たに追加したフォームにはこのロジックは記載されていませんでした。
これは記述する必要があるのでしょうか。

長くて解かりづらい内容ですがどなたかよろしくお願いします。
仰られている既存のフォームというのは、 VB6 プロジェクトからアップグレードウィザードによって生成されたもののようですね。
 これは記述する必要があるわけではなく、こうすることでアップグレードを円滑に行ってるものだと思われます。以前、似た話題がありました。

フォームのLoadについて
http://dobon.net/vb/bbs/log3-7/4193.html
#あぁ、当時の自分はシングルトンを知らなかったんだなぁ(///)


 クラスの設計という観点から見ると、大抵の場合このようにするのは望ましくありません。
 オブジェクトの生成と変数のスコープについて、再度確認されてはいかがかと。

DOBON.NET | プログラミング道 | プログラミング掲示板