はじめまして。VBを最近はじめました。
VB6でソフトを作っているのですが、
ユーザー定義型のメンバ名を指定して、そこにデータを書き込むってことは
できるのでしょうか?
たとえば、以下のようなユーザー定義型
public testData As testType
Public Type testType
data1 as string
data2 as string
data3 as string
end type
この構造体にデータを書き込むときに、普通は以下のとおりにします。
<方法1>
testData.data1 = "データ1"
testData.data2 = "データ2"
testData.data3 = "データ3"
もし、メンバ名を指定してできるのであれば、以下のようなことが
可能となります。
<方法2>
Dim formatStr As string
formatStr = "データ"
with testData
for i = 1 to 3
.data & i = formatStr & i '← 実際は、こんなコード動かないです。イメージです。
next
end with
これができれば、コードが簡素化できると思うのですが、
こんなことってできないですよね?
みなさんだったら、やっぱり、<方法1>でやりますか?
初心者質問で申し訳ないです。
ご助言ください。
配列って使えないっけ?
Variant型に代入可能なユーザ定義型であるのならば可能です。
> Public Type testType
> data1 as string
> data2 as string
> data3 as string
> end type
これを
Public Type testType
data(2) As String
End Type
にして、
For i = 0 To 2
testData.data(i) = "データ" & CStr(i)
Next
とするのが良いでしょう。これは、名無しさんの解決策ですね。
一方、K.J.K.さんが書かれた、「Variant型に代入可能なユーザ定義型」の
場合は、こんな感じでしょうか。
http://www7.big.or.jp/~pinball/discus/vb/59197.html
名無しさん、K.J.K.さん、魔界の仮面弁士さん
回答ありがとうございました。
「Variant型に代入可能なユーザ定義型」の方法ですと、ユーザー定義型というよりも、クラスを用いるということでしょうか?
やはり、クラスを使わずに、構造体のメンバーの名前を指定するというのは、無理ということでしょうか?
それと、説明不足で申し訳なかったのですが、
最初に、配列の方法を考えていたのですが、この方法ですと、対応できない場合があったため、直接、メンバ名を指定したいなぁと思ったのです。
たとえば、こういう場合です。
Public Type testType
aaa as string
bbb as string
ccc as string
end type
「Variant型に代入可能なユーザ定義型」は「ユーザ定義型」であって、
「クラス」ではありません。
名前が不定もしくは多様に渡るのであれば、直接全部を含めた
ユーザ定義型にせずに、
A,String型の名前のフィールドと値を格納するフィールドを用意して、
それの配列を用いる。
B,Collectionを用いる。
C,一時的なデータベースオブジェクトを作成し、それを利用する。
D,COM+の機能を用いて、動的なクラスを生成してそれを用いる。
など、いろいろな方法がありえますよね。
# 当然、これ以外にもあります。
ツイート | ![]() |