注册 登录
编程论坛 VB6论坛

【求助】“不能给数组赋值”,请问该怎么改啊

coucongzi 发布于 2013-08-01 18:17, 546 次点击
在text中输入不同数字
按回车键之后切换到不同的label控件
并将text中的内容显示在对应的label控件中
代码如下:
Dim i As Long
Dim s As String
Dim k As Object
If KeyCode = 13 Then                '如果按下了回车键
    i = Val(Text1.Text)             '转数字  ,
'没写范围判断,因为通过循环后,不在范围内的数据无法找到控件也就是无结果
    s = "Label" & i                 '注意大小写
    For Each k In Form1.Controls    '查找所有的控件
        If k.Name = s Then          '找到了指定名字的
            k.Caption = i           '给值
            Exit For                '退出循环
        End If
    Next
End If   
End Sub


若要将Label控件改成数组控件Label1()数组控件,修改如下,结果出现了报错:“不能给数组赋值”,请大侠帮帮忙啊,是哪里出错了
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
Dim i As Long
Dim s() As Integer
Dim k As Object
If KeyCode = 13 Then                '如果按下了回车键
    i = Val(Text1.Text)             '转数字  ,
'没写范围判断,因为通过循环后,不在范围内的数据无法找到控件也就是无结果
    s() = "Label1" & (i)            '注意大小写
    For Each k In Form2.Controls    '查找所有的控件
        If k.Name = s() Then          '找到了指定名字的
            k.Caption = i           '给值
            Exit For                '退出循环
        End If
    Next
End If
End Sub
4 回复
#2
lowxiong2013-08-01 18:42
错误1:Dim s() As Integer定义的是一个整形动态数组,s() = "Label1" & (i)是给动态数组赋字符型值
错误2:动态数组是一个没有维数的数组,应先redim后才能赋值,s() = 1这种方式是错误的
错误3:算法错误,有了控件数组就不需要遍历窗体控件来判断控件名了,正确代码如下(首先确保你已加载所需数目的控件数组)
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
  Dim i As Long
  If KeyCode = 13 Then                '如果按下了回车键
    i = Val(Text1.Text)             '转数字  ,
    Label1(i).Caption=i             '给值
  End If
End Sub
#3
风吹过b2013-08-01 19:50
用 搜索 控件名字时,是找不到例如
Label1(1) 这种的控件名的控件的。

label1(1) ,这个标识符是分成二个 属性的。
一个是 Name  = Label1 ,另一个是 Index = 1

再说,你这个组合也写错了。
"Label1" & (i)         假如 I= 1时,得到的是 "Label11" ,而不是所期望的 "Label1(1)"
#4
hjxlj2013-08-03 12:22
楼主你既然把Label1设置成了控件数组,就没必要再用
For Each k In Form2.Controls
这样的语句来遍历所有控件了。而且,如果Form2上有其它控件,比如TextBox控件,你这样不加判断就直接对遍历到的控件的Caption属性赋值,会引发错误的。因为TextBox控件是没有Caption属性的。
其实楼主的问题相当简单,你既然把Label1设置成了控件数组,那么就可以直接把TextBox1中输入的数字,作为Label1控件数组的下标,直接得到对应的Label1控件数组元素,然后对它的有关属性赋值就可以了。
我把你上面有关Label1控件数组的代码修改成如下:
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
Dim i As Long
If KeyCode = 13 Then '如果按下了回车键
i = Val(Text1.Text) '转数字 ,
If i < Label1.Count Then Label1(i).Caption = Str(i)   '给值
End If
End Sub
由于是用手机回的帖,格式不好控制,代码可能有些乱。

[ 本帖最后由 hjxlj 于 2013-8-3 13:10 编辑 ]
#5
hjxlj2013-08-03 12:30
从我4楼的代码可以看到,对控件数组的操作和普通的数组操作是一样的,都是通过下标来获得相应的数组元素,然后再对获取到的元素进行操作。只不过控件数组的数据类型是控件而已。祝楼主学习愉快!

[ 本帖最后由 hjxlj 于 2013-8-3 13:16 编辑 ]
1