今さらながらVB6のPropertyプロシージャで教えてほしい事があります

タグの編集
投稿者 じょにー  (社会人) 投稿日時 2013/2/28 19:03:13
VB6で引数を持つSet又はLetのPropertyプロシージャを作る事は出来ますか?
Getの方はPublic Property Get PropName(X As Integer, Y As Integer) As String

End Property
で記述の仕方は解るのですがSetの方の引数を記述する方法が解りません。
VB6で古い言語で申し訳ありませんがご指導の程よろしくお願いいたします。
投稿者 shu  (社会人) 投稿日時 2013/2/28 21:42:08
最近さわってないので
ちがうかもしれませんが
Getの引数 の後にLetまたはSetする値用の引数が
あればよいと思います。
この場合、
Set (X As Integer, Y As Integer, Value As String)
投稿者 じょにー  (社会人) 投稿日時 2013/2/28 21:59:12
Shu様、早速のご回答ありがとうございます。文中のValue As StringがSetする変数にあたる訳ですね
その場合、引数が1つでも2つでも3つでも、最後の引数がSet用の引数になるのでしょうか?古い言語の質問で、申し訳ありませんがVB界ではVB.netが既に標準になっていますが(私は、こちらは、只今勉強中です。)EXEclVBAのVB6言語が、まだまだ現役で、私は、結構使用率が高いです。最近はネットでも、VB6で検索しても、VB.netで検索されて資料が少なくて困っています。ここの掲示板はみなさん、直ぐにご回答をいただけるので助かっています。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2013/2/28 22:08:50
Public Property Get PropName(X As Integer, Y As IntegerAs String

End Property


Public Property Let PropName(X As Integer, Y As IntegerByVal newPropName As String)

End Property
のように対応させます。今回は戻り値が String なので、使うのは Property Let 宣言ですね。
最後の「newPropName」という引数名は、他の名前にしても構いません。

ちなみに、[ツール]-[プロシージャの追加]メニューからプロシージャを追加した場合には
この引数部分には vNewValue という名が使われます。また、Visual Basic アドインの
「クラス ビルダ ユーティリティ」から追加した場合は vData という名が使われますし、
「ActiveX コントロール インターフェイス ウィザードでは New_PropName といった名が
採用されています。参考までに。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2013/2/28 23:56:01
> その場合、引数が1つでも2つでも3つでも、最後の引数がSet用の引数になるのでしょうか?
引数が n 個のプロパティを定義する場合、
Property Get の引数宣言は n 個となり、
Property Set/Let の引数宣言は n + 1 個となります。

最後の引数は、新しく代入されるプロパティの値(Property Get の戻り値に相当)を受け渡すもので、
それよりも前の引数が、プロパティの引数として使われます。

ヘルプでは、以下のように記載されていますね。
[Public | Private | Friend] [Static] Property Get name [(arglist)] [As type]

[Public | Private | Friend] [Static] Property Set name ([arglist,] reference)

[Public | Private | Friend] [Static] Property Let name ([arglist,] value)

reference 
必ず指定します。オブジェクトへの参照式の右辺に記述された、オブジェクトへの参照を表す変数を指定します。 

value 
必ず指定します。プロパティに代入する値を持つ変数を指定します。プロシージャを呼び出す場合、呼び出す式の右辺にこの引数を記述します。引数 value のデータ型は、対応する Property Get プロシージャの戻り値のデータ型と一致していなければなりません。 



ListBox を例に挙げれば、引数が 0 個の ListIndex プロパティなら、
 Property Get ListIndex() As Integer
 Property Let ListIndex(ByVal selectedIndex As Integer)
のような構文となり、引数が 1 個の Selected プロパティなら、
 Property Get Selected(Index AS Integer) As Boolean
 Property Let Selected(Index AS Integer, ByVal selValue As Boolean)
のような構文となります。
投稿者 じょにー  (社会人) 投稿日時 2013/3/1 05:37:23
魔界の仮面弁士師匠様丁寧な御解説ありがとうごます。
いつもながら、師匠の御解説は、大変解りやすく勉強になります。Set側の引数のどれがSet変数になるかは、Get側と2つペアで使ってGet側で使用していない引数がSet変数のになると言う考え方でよろしいのですね、大変良く解りました。ありがとうございました。