tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^2: Activexで呼び先のコレクションへデータをセットする方法
投稿日: 2010/03/17(Wed) 20:48
投稿者ぶー
>   Set Obj = CreateObject("Prog2.class1")
>   with Obj 
>     .Sendatas = new collection
>     set .Sendatas = col

No.14563 では、Set 操作を 2 回行っていたのに対し、今回の
No.14565 では、Let 操作の後に Set 操作を行っていますね。どちらが本当ですか?

答え)No.14565が正しいです。すいません

また、ここで代入している「変数 col」とは何者でしょうか?
さらに、その Prog1 側の col インスタンスの内容はどうなっていますか?

(1) 変数 col は、As New Collection として宣言された変数である。
(2) 変数 col は、As Collection として宣言された変数である。
(3) 変数 col は、上記以外の宣言で作られた変数である。
(4) col は変数ではなく、Prog1 側のプロシージャである。

答え)
private Sub DataSet 

Dim col  as collection
Dim cls2 as classA
     set col = new collection
     set cls2 = new classA
     with cls2
         .aa = "001"
         .bb = "*****"
         (こんな感じでcls2にセットされて、cls2の構造は割愛します)
     end with
     For i=1 to データ最大取得数
       col.add cls2    
     next    
    
  colの中には登録データがデータ最大取得数分入っていました。
  (debug.Print col.countで確認

     Set Obj = CreateObject("Prog2.class1")
     with Obj 
        .Sendatas = new collection
        set .Sendatas = col
     end with
    
end sub

Prog2のclass1.clsの中身

 public Sendatas as collection
提示されたコードだと、そもそもエラーになってしまうハズですが…。

答え)エラーにはなりませんでした。

debug.Print Sendatas.count で確認すると0になってしまいます。
ちなみにProg2のReadへ来るまでに
Sendatasの中身を消すような処理はありません。

Prog2.class1 側でモジュールレベル変数として実装されているだけなら、
Prog1 側で Let 操作を行おうとすると、エラーになってしまうはずです。

逆に、本当に今回のように Let と Set 動作を行っているのだとすれば、
Prog2.class1 側には少なくとも
 Public Property Let Sendatas(…
 Public Property Set Sendatas(…
 Public Property Get Sendatas(…
のうち、Let と Set の実装が必要になるはずです。

答え)Let/Setは使っていません。
どう使えばよろしいでしょうか?

>> 代入処理を 2 回行っているのはなぜでしょうか?
> こうすればセットするのかなと思いまして・・(いろいろ試行錯誤してまして)
無意味だと思いますよ。2回目の Set 操作だけで十分なはずです。
(2 回目の Set 操作が行われる際に、1 回目に Set したインスタンスが破棄されるので)

答え)ありがとうございます。勉強になります。

説明が下手ですいません。これで伝わりましたでしょうか?

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。