tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトル疑似配列
記事No13999
投稿日: 2009/09/01(Tue) 16:37
投稿者どったの
VB6ですが。
フォームにスイッチを100個配置したいので、疑似配列を用いて作りたいのですが、
Excelで動いていた物を移植しようとしています。
内容を理解していなくてすみませんが、MyCmdでエラーしています。
ユーザー定義型が定義されていません。と言う事ですがどういう事でしょうか?

’フォーム Form1
Dim CB_dimension1(3) As MyCmd
Private Sub UserForm_Initialize()
    For p = 1 To 3
        Set CB_dimension1(p) = New MyCmd
        CB_dimension1(p).obj = Form1.Controls("Command" & p)
        CB_dimension1(p).Name = "CB-" & p
    Next p
End Sub


'クラスモジュール Class1
Private WithEvents i_ctrl As CommandButton
Private i_name As String

Public Property Let obj(argobj As CommandButton)
    Set i_ctrl = argobj
End Property

Public Property Let Name(argname As String)
    i_name = argname
End Property

Public Property Get Name() As String
    Name = i_name
End Property

Private Sub i_ctrl_Click()
        MsgBox i_name & "が押されました"
End Sub

[ツリー表示へ]
タイトルRe: 疑似配列
記事No14000
投稿日: 2009/09/01(Tue) 17:58
投稿者魔界の仮面弁士
> フォームにスイッチを100個配置したいので、疑似配列を用いて作りたいのですが、

VB6 の場合には、コントロール配列を使った方が簡単かと思いますよ。

開発時に、ボタン(Command1)の Index プロパティに 0 を指定してみてください。
そうすると、コントロール配列が生成されます。

あとはそれを
 For p = 1 To 10
  Load Command1(p)
  Command1(p).Caption = "ボタン" & CStr(p)
  Command1(p).Move Command1(p - 1).Left, Command1(p - 1).Top + Command1(p - 1).Height
  Command1(p).Visible = True
 Next
のようにすれば、実行時に Load/Unload で増減させることもできます。


あるいは実行時に増減させるのではなく、開発時に、
その Command1(0) を Ctrl+C と Ctrl+V でコピーしていけば、
「Index のみが異なる同名のコントロール」が用意されますので、それを
 For p = 0 To 99
  Command1(p).Caption = "ボタン" & CStr(p)
 Next
あるいは
 Dim cmd As VB.CommandButton
 For Each cmd In Me.Command1
  cmd.Caption = "ボタン" & CStr(cmd.Index)
 Next
などのようにしてプログラムから処理できるようになります。



> 内容を理解していなくてすみませんが、MyCmdでエラーしています。
この方法の場合には、MyCmd という名前の クラスモジュールを用意する必要があります。
Excel 側のソースが残っていれば、そのクラスモジュールにも幾つかのコードが
記述されているかと思いますので、調べてみてください。

[ツリー表示へ]
タイトルRe^2: 疑似配列
記事No14011
投稿日: 2009/09/04(Fri) 16:27
投稿者どったの
魔界の仮面弁士様返事が大変遅くなり済みませんでした。
教えて頂いたコントロール配列で簡単に実現できました。
どうも有り難う御座いました。

[ツリー表示へ]