|
分類:[VB.NET/VB2005 以降]
既にいない別担当の書いたvb6のソースをvb2005に移植して更に仕様変更する仕事をしているのですが、表題の現象に遭遇し悩んでいます。
ソースを抜粋し単純化するとこんな感じです。
・構造体の定義
Module Module2
Public Const TES_MAXNUM As Short = 6
Structure TES_CFG
<VBFixedArray(TES_MAXNUM)> Dim intTesType() As Short
Public Sub Initialize()
ReDim intTesType(TES_MAXNUM)
End Sub
End Structure
Public udtTesOldCfg As New TES_CFG
Public udtTesNowCfg As New TES_CFG
End Module
・main関数(ここからスタート)
Module Module1
Public Sub Main()
udtTesOldCfg.Initialize()
udtTesNowCfg.Initialize()
Form1.ShowDialog()
End Sub
End Module
・問題の部分
Friend Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Call ComboBox1.Items.Add("ComboBox1_1")
Call ComboBox1.Items.Add("ComboBox1_2")
Call ComboBox1.Items.Add("ComboBox1_3")
Call ComboBox1.Items.Add("ComboBox1_4")
End Sub
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
'TEST用
If udtTesNowCfg.intTesType(1) <> udtTesOldCfg.intTesType(1) Then
MsgBox("不一致")
End If
udtTesNowCfg.intTesType(1) = ComboBox1.SelectedIndex '問題の個所
'TEST用
If udtTesNowCfg.intTesType(1) <> udtTesOldCfg.intTesType(1) Then
MsgBox("不一致")
End If
End Sub
End Class
要はソフト起動時と変化があったかを記録して、あった場合終了時に保存するかメッセージを出すための処理です。
ここで
udtTesNowCfg.intTesType(1) = ComboBox1.SelectedIndex
の部分でudtTesNowCfg.intTesTypeだけ変えてるつもりなのですが、udtTesOldCfg.intTesTypeも同じ値に変わってしまうのです。
ちなみにこの単純化したプログラムだと現象が起きません。
実際は構造体の要素はずっと多く、この前後の処理も当然いっぱいあるのですが、特に関係しそうなところが分からないのですが。
よろしくお願い致します。
|