人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【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


●質問者: harunoharuno
●カテゴリ:ウェブ制作
✍キーワード:as nothing String test vb6
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● HALSPECIAL
●360ポイント ベストアンサー

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

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


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]
[]

◎質問者からの返答

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

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

Setが抜けていました。

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

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


2 ● heke2mee
●150ポイント

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

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 ダミー

◎質問者からの返答

ご指摘の通り

Setが抜けていました。

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ