tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルプロパティをループで回す方法
記事No16438
投稿日: 2018/08/02(Thu) 14:15
投稿者今どきVB6
いつも利用させていただいています・
早速質問です。
表題にもあるうようにコントロールのプロパティを変数使ってループで
回せないかというものです。
あるコントール(名前をAAAとします)があり
そのプロパティが(名前をbbbとします)だったとします。
そのプロパティが、コントロール内で複数存在します。
例としては、AAA.bbb1
      AAA.bbb2
        ・
        ・
        ・
      AAA.bbbN
となります。
このとき、プロパティをループで回す方法ってあるんでしょうか?
現在は、
   AAA.bbb1=値
   AAA.bbb2=値
というようにプロパティ数分書いています。
理想としては、これが
   FOR i=1 TO N
     AAA.bbb & i=値
   Next i
みたいに書けると大変助かるのですが。
どなたかご教授いただけると幸いです。
よろしくお願いします。

[ツリー表示へ]
タイトルRe: プロパティをループで回す方法
記事No16439
投稿日: 2018/08/02(Thu) 16:29
投稿者魔界の仮面弁士
> あるコントール(名前をAAAとします)があり
> そのプロパティが(名前をbbbとします)だったとします。
> そのプロパティが、コントロール内で複数存在します。

整数を引数として受け取るプロパティ、たとえば
VB6 の ListBox の List プロパティなどは、このように書けますね。

Option Explicit

Private Sub Form_Load()
    Dim i As Integer
    For i = 0 To 10
        List1.List(i) = "サンプル" & CStr(i)
    Next
End Sub

Private Sub Command1_Click()
    Dim i As Integer
    For i = 0 To List1.ListCount - 1 Step 2
        List1.List(i) = "偶数" & CStr(i)
    Next
End Sub



プロパティ名の末尾に 1 , 2 , 3 , …のような連番がつく形なら、
 'AAA.bbb1 = 値
 Call CallByName(AAA, "bbb" & CStr(n), VbLet, 値)
ですね。

引数付プロパティの場合は
 'AAA.bbb1(引数1, 引数2) = 値
 Call CallByName(AAA, "bbb" & CStr(n), VbLet, 引数1, 引数2, 値)
のような感じです。今回は引数無しのようですが。



> 例としては、AAA.bbb1

"bbb1" ではなく
"bbb1" なのですね?

ということは、全角変換も必要なので、
 Dim propName As String
 For n = 1 To N
  propName = "bbb" & StrConv(CStr(n), vbWide, &H411)
  Call CallByName(AAA, propName, VbLet, 値)
 Next
になりそうです。

[ツリー表示へ]
タイトルRe^2: プロパティをループで回す方法
記事No16440
投稿日: 2018/08/03(Fri) 08:27
投稿者今どきVB6
魔界の仮面弁士さま、返信ありがとうございます。

> プロパティ名の末尾に 1 , 2 , 3 , …のような連番がつく形なら、
>  'AAA.bbb1 = 値
>  Call CallByName(AAA, "bbb" & CStr(n), VbLet, 値)
> ですね。
>
> 引数付プロパティの場合は
>  'AAA.bbb1(引数1, 引数2) = 値
>  Call CallByName(AAA, "bbb" & CStr(n), VbLet, 引数1, 引数2, 値)
> のような感じです。今回は引数無しのようですが。
なるほど〜。『CallByName』を使うのですね。
VBを長年やってきてましたが、初めてお目にかかる関数です。
お恥ずかしい。
ちなみに、プロパティ名はすべて半角です。
投稿する際、見やすいと思って全角にしてしまいました。すいません。
ただ、全角だった場合の方法も知れたので幸いです。
早速、教えていただいた方法で試してみようと思います。
また、わからないことがあったらよろしくお願いします。

[ツリー表示へ]
タイトルRe^2: プロパティをループで回す方法
記事No16441
投稿日: 2018/08/03(Fri) 08:53
投稿者今どきVB6
魔界の仮面弁士さま

いつもお世話になります。
教えていただいた方法を早速試してみました。
結果は、こちらが意図した通りになりました。
ありがとうございます。
これで、ステップ数が削減できるので大変助かります。
また、わからないことがありましたらよろしくお願いします。

[ツリー表示へ]