構造体のメンバに、メンバ名を指定する。


ミドリ子  2005-12-30 11:43:32  No: 129319

はじめまして。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>でやりますか?

初心者質問で申し訳ないです。
ご助言ください。


名無し  2005-12-30 15:45:19  No: 129320

配列って使えないっけ?


K.J.K.  2005-12-30 17:07:24  No: 129321

Variant型に代入可能なユーザ定義型であるのならば可能です。


魔界の仮面弁士  2005-12-30 18:18:49  No: 129322

> 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


ミドリ子  2006-01-04 10:26:36  No: 129323

名無しさん、K.J.K.さん、魔界の仮面弁士さん
回答ありがとうございました。

「Variant型に代入可能なユーザ定義型」の方法ですと、ユーザー定義型というよりも、クラスを用いるということでしょうか?
やはり、クラスを使わずに、構造体のメンバーの名前を指定するというのは、無理ということでしょうか?

それと、説明不足で申し訳なかったのですが、
最初に、配列の方法を考えていたのですが、この方法ですと、対応できない場合があったため、直接、メンバ名を指定したいなぁと思ったのです。

たとえば、こういう場合です。

Public Type testType
    aaa as string
    bbb as string
    ccc as string
end type


K.J.K.  2006-01-04 21:55:11  No: 129324

「Variant型に代入可能なユーザ定義型」は「ユーザ定義型」であって、
「クラス」ではありません。

名前が不定もしくは多様に渡るのであれば、直接全部を含めた
ユーザ定義型にせずに、
A,String型の名前のフィールドと値を格納するフィールドを用意して、
それの配列を用いる。
B,Collectionを用いる。
C,一時的なデータベースオブジェクトを作成し、それを利用する。
D,COM+の機能を用いて、動的なクラスを生成してそれを用いる。
など、いろいろな方法がありえますよね。
# 当然、これ以外にもあります。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加