| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 546 人关注过本帖
标题:【求助】“不能给数组赋值”,请问该怎么改啊
只看楼主 加入收藏
coucongzi
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2012-11-1
结帖率:90%
收藏
已结贴  问题点数:10 回复次数:4 
【求助】“不能给数组赋值”,请问该怎么改啊
在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
2013-08-01 18:17
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
收藏
得分:6 
错误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
2013-08-01 18:42
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4943
专家分:30047
注 册:2008-10-15
收藏
得分:2 
用 搜索 控件名字时,是找不到例如
Label1(1) 这种的控件名的控件的。

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

再说,你这个组合也写错了。
"Label1" & (i)         假如 I= 1时,得到的是 "Label11" ,而不是所期望的 "Label1(1)"

授人于鱼,不如授人于渔
早已停用QQ了
2013-08-01 19:50
hjxlj
Rank: 10Rank: 10Rank: 10
来 自:江西
等 级:贵宾
威 望:14
帖 子:292
专家分:1519
注 册:2013-6-25
收藏
得分:2 
楼主你既然把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 编辑 ]

本人QQ:775420425
2013-08-03 12:22
hjxlj
Rank: 10Rank: 10Rank: 10
来 自:江西
等 级:贵宾
威 望:14
帖 子:292
专家分:1519
注 册:2013-6-25
收藏
得分:0 
从我4楼的代码可以看到,对控件数组的操作和普通的数组操作是一样的,都是通过下标来获得相应的数组元素,然后再对获取到的元素进行操作。只不过控件数组的数据类型是控件而已。祝楼主学习愉快!

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

本人QQ:775420425
2013-08-03 12:30
快速回复:【求助】“不能给数组赋值”,请问该怎么改啊
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011437 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved