クラスモジュール内のユーザー定義型変数を外部から変更するには?

解決


MMR  2005-02-19 22:13:53  No: 119807

標準モジュール
Type typX
  strY1 As String
  lngY2 As String
End Type

クラスモジュール(ObjectNmae=clsA)
Dim m_Z(2) As typX

このような状態でクラス外からclsA.Z(1).strY1の様にクラス内のユーザー定義型変数をプロパティとして扱うにはどうすればよいのでしょうか

値の取得は
Friend Property Get Z(index as Integer) As typX
  Z = m_Z(index)
End Property
でできるのですが

値の設定では
Friend Property Get Z(index as Integer, Value As typX)
  m_Z(index) = Value
End Property
としただけでは
clsA.Z(1).strY1="aaa"
と入力しても値が変更されないのです。


LESIA  2005-02-19 23:10:12  No: 119808

値の設定はProperty GetじゃなくてProperty Letですよ(^^;
それとも投稿時のタイプミスでしょうか?

ユーザー定義型のメンバーに直接入力できないのでは?

試してないけど
Dim udtX As typX

udtX.strY1 = "aaa"
clsA.Z81) = udt
としてみるとか

もしかすると
Lset clsA.Z81) = udt
としないとだめかもしれない。


MMR  2005-02-20 02:02:47  No: 119809

値の設定はご指摘の通りで入力ミスです。

あと、解決策ですがその方法も考えつきはしたのですが値の変更を行うには該当するプロシージャでいちいち代入用変数を宣言するか、グローバルスコープで宣言しておいて毎回コピー→変更→代入と手間がかかるので直接設定できないかとお尋ねしました。


LESIA  2005-02-20 03:00:53  No: 119810

Friend Property Get Z_strY1(index As Integer) As String
  Z_strY1 = m_Z(index).strY1
End Property

Friend Property Let Z_strY1(index As Integer, Value As String)
  m_Z(index).strY1 = Value
End Property

Friend Property Get Z_lngY2(index As Integer) As String
  Z_lngY2 = m_Z(index).lngY2
End Property

Friend Property Let Z_strY2(index As Integer, Value As String)
  m_Z(index).lngY2 = Value
End Property

というPropertyを作るのはだめですか?


MMR  2005-02-20 03:09:58  No: 119811

ご返答ありがとうございます。
提示された方法では実際に作っているプログラムではプロパティが多くなりすぎる(100は超えます)ので訳がわからない状況のなってしまいます。
また、今の方法だとネストしたユーザー定義型が使えないようなのでクラス自体の階層化をした方が良さそうだとわかりました。


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




  


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