【VB6 構造体をクラスに変更する際のトラブル】Type型で定義したtest構造体をクラスモジュールにclass1として外だししました。

test構造体は配列にして配列長を設定していたので、、、、
testクラスもPreserveを用い、設定した後にtestクラス.strA="適当な値"を実行したところイレギュラーになる現象を確認しました。
これはどのような現象なのでしょうか?アドバイス頂きたく宜しくお願いします。

【備考】

ReDim Preserve インスタンスtestクラス(配列長)のステップ実行をした後に、カーソルを合わせると
インスタンスtestクラス(配列長)=Nothingと表示されます。


<<define.bas>>
Public Type test
  strA As string
End Type

<<test.cls>>
  public strA As string

回答の条件
  • URL必須
  • 1人2回まで
  • 13歳以上
  • 登録:2010/04/15 21:03:39
  • 終了:2010/04/16 14:35:32

ベストアンサー

id:HALSPECIAL No.1

HALSPECIAL回答回数407ベストアンサー獲得回数862010/04/16 00:44:29

ポイント360pt

以下の様に書いてみましたが、特におかしなところはありませんでした。

コメントを開いてもらえれば、引き続き回答が可能と思います。


Form1.vb

Option Explicit

Private Sub Command1_Click()
    
    Dim t() As test
    
    ReDim Preserve t(2)
    Set t(0) = New test
    Set t(1) = New test
    Set t(2) = New test
    
    t(0).strA = "適当な値1"
    t(1).strA = "適当な値2"
    
    Debug.Print "[" & t(0).strA & "]"
    Debug.Print "[" & t(1).strA & "]"
    Debug.Print "[" & t(2).strA & "]"
    
End Sub

test.cls

Option Explicit

Public strA As String

イミディエイトウィンドウの結果

[適当な値1]
[適当な値2]
[]

id:harunoharuno

回答ありがとうございます。

例のソースコードを見たときピントきたのですが、

Setが抜けていました。

(正) Set t(1) = New test →(誤) t(1) = New test

いつも丁寧に例まで示していただきありがとうございます。

2010/04/16 14:33:37

その他の回答(1件)

id:HALSPECIAL No.1

HALSPECIAL回答回数407ベストアンサー獲得回数862010/04/16 00:44:29ここでベストアンサー

ポイント360pt

以下の様に書いてみましたが、特におかしなところはありませんでした。

コメントを開いてもらえれば、引き続き回答が可能と思います。


Form1.vb

Option Explicit

Private Sub Command1_Click()
    
    Dim t() As test
    
    ReDim Preserve t(2)
    Set t(0) = New test
    Set t(1) = New test
    Set t(2) = New test
    
    t(0).strA = "適当な値1"
    t(1).strA = "適当な値2"
    
    Debug.Print "[" & t(0).strA & "]"
    Debug.Print "[" & t(1).strA & "]"
    Debug.Print "[" & t(2).strA & "]"
    
End Sub

test.cls

Option Explicit

Public strA As String

イミディエイトウィンドウの結果

[適当な値1]
[適当な値2]
[]

id:harunoharuno

回答ありがとうございます。

例のソースコードを見たときピントきたのですが、

Setが抜けていました。

(正) Set t(1) = New test →(誤) t(1) = New test

いつも丁寧に例まで示していただきありがとうございます。

2010/04/16 14:33:37
id:heke2mee No.2

heke2mee回答回数162ベストアンサー獲得回数432010/04/16 04:44:03

ポイント150pt

コメント欄が無かったので、こちらで失礼します。

HALSPECIAL さんのコードを一部借用しました。


構造体の場合

    Dim arr() As OrgType
    
    ReDim Preserve arr(1)
    
    arr(0).strA = "適当な値1"
    arr(1).strA = "適当な値2"
    
    
    Debug.Print "[" & arr(0).strA & "]"
    Debug.Print "[" & arr(1).strA & "]"
    
    
    ReDim Preserve arr(2)
    
    arr(2).strA = "適当な値3"
    
    Debug.Print "[" & arr(0).strA & "]"
    Debug.Print "[" & arr(1).strA & "]"
    Debug.Print "[" & arr(2).strA & "]"

クラスの場合

    Dim t() As TestCls
    
    ReDim Preserve t(1)
    Set t(0) = New TestCls
    Set t(1) = New TestCls
    
    t(0).strA = "適当な値1"
    t(1).strA = "適当な値2"
        
    Debug.Print "[" & t(0).strA & "]"
    Debug.Print "[" & t(1).strA & "]"
    
        
    ReDim Preserve t(2)
        
    Set t(2) = New TestCls '【これが抜けてのでは?】
    t(2).strA = "適当な値3"
        
    Debug.Print "[" & t(0).strA & "]"
    Debug.Print "[" & t(1).strA & "]"
    Debug.Print "[" & t(2).strA & "]"

配列を作成した後にクラスを新しくセットしていないのが原因ではないでしょうか

http://q.hatena.ne.jp ダミー

id:harunoharuno

ご指摘の通り

Setが抜けていました。

(正) Set t(1) = New test →(誤) t(1) = New test

2010/04/16 14:33:50

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません