| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2424 人关注过本帖
标题:创建多个label控件,不是数组,数量会有变化怎么弄的?
只看楼主 加入收藏
wxflw
Rank: 6Rank: 6
等 级:侠之大者
帖 子:325
专家分:435
注 册:2012-1-29
结帖率:87.21%
收藏
已结贴  问题点数:20 回复次数:8 
创建多个label控件,不是数组,数量会有变化怎么弄的?
Private WithEvents 查看 As Label

           Lname =  J ’变量
            Set 查看 = Me.Controls.Add("VB.Label", Lname)
             With 查看
                 .Visible = True
                 .Caption = "OK"
                 .Left = 5 * J + X - 2
                 .Top = T / 150 + Y + 8
                 .Width = 2
                 .Height = 4
                 .ForeColor = vbGreen '
                 .BackStyle = 0
                 .ToolTipText = rs.Fields("维修日期")
             End With
我可以动态生成控件,但是只有最后一个控件可以响应单机或鼠标事件,怎么处理?不适用数组。
 Controls.Remove Lname  '删除已创建的控件label

'--------------------------------------
'清空label控件
    For Each Label In Me.Controls
           If TypeOf Label Is Label Then        
                 Controls.Remove Label.Name
           End If
    Next
'--------------------------------------
搜索更多相关主题的帖子: 维修 
2013-06-09 08:10
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:15 
为什么不适用数组???

因为你的 标签的名字是一样的,所以加载的过程中,后面的标签会把前面的 标签从 事件处理函数中去掉,所以只有最后一个 标签才有响应事件。

授人于鱼,不如授人于渔
早已停用QQ了
2013-06-09 08:17
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:5 
为什么不适用数组???

因为你的 标签的名字是一样的,所以加载的过程中,后面的标签会把前面的 标签从 事件处理函数中去掉,所以只有最后一个 标签才有响应事件。

授人于鱼,不如授人于渔
早已停用QQ了
2013-06-09 08:23
wxflw
Rank: 6Rank: 6
等 级:侠之大者
帖 子:325
专家分:435
注 册:2012-1-29
收藏
得分:0 
风老师!我尝试使用数组,但是我的.Index数值不是有规律的,可能是1.2.3.4,也可能是1.4.9,这样的话,如果要删除所有已创建的控件该招人么做的?

用 for因为.Index不确定所以不方便,
For Each Label In Me.Controls
           If TypeOf Label Is Label Then
                  Unload Me.Label1(Label1.Index)
           End If
 Next
这个好像也不行

学习--------------学习-------------------学习--------------------!!
2013-06-09 13:06
wxflw
Rank: 6Rank: 6
等 级:侠之大者
帖 子:325
专家分:435
注 册:2012-1-29
收藏
得分:0 
已经搞定,代码发出来供大家参考:
目的:创建label控件数组,数组的index值不固定为任意值,
Private WithEvents Label1 As Label'声明

'-----------------------------------------------
        '判断获得的日期是星期几
        J = Weekday(rs.Fields("日期")) '取得值
        If J = 1 Then
           J = J + 6
        Else
           J = J - 1
        End If
        '------------------------------------------------
            Load Me.Label1(J) '加载控件,index值为按星期天数设定,因为记录有可能存在断档,所以不一定INDEX是1234567,有可能是137
             With Me.Label1(J)
                 .Visible = True
                 .Caption = "OK"
                 .Left = 5 * J + X - 2  'X坐标
                 .Top = T / 150 + y + 8  'Y坐标
                 .Width = 2    '宽度
                 .Height = 4   '高度
                 .ForeColor = vbGreen '字体颜色
                 .BackStyle = 0
                 .ToolTipText = rs.Fields("日期")
             End With
’删除所有创建了的label控件数组
For Each Label In Me.Controls
        If TypeOf Label Is Label Then
           I = Label.Index
             If I > 0 Then
                Unload Me.Label1(I)
             End If
       End If
Next

学习--------------学习-------------------学习--------------------!!
2013-06-09 14:54
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
For Each Label In 标签的名字就可以的

例:
窗体上放一个 label1(0) 标签控件和 command1 控件,测试代码如下:
程序代码:
Option Explicit

Dim labjs As Long

Private Sub Command1_Click()
labjs = labjs + 1
Load Label1(labjs)
With Label1(labjs)
    .Caption = labjs
    .Visible = True
End With
Call label1move
End Sub


Private Sub Label1_Click(Index As Integer)
Unload Label1(Index)
Call label1move
End Sub

Private Sub label1move()
Dim k As Label
Dim x As Long, y As Long
x = 0
y = 0

For Each k In Label1
    k.Move x, y
    x = x + k.Width
    If x + k.Width > Me.ScaleWidth Then
        y = y + k.Height
        x = 0
    End If
Next
End Sub

授人于鱼,不如授人于渔
早已停用QQ了
2013-06-09 16:47
wxflw
Rank: 6Rank: 6
等 级:侠之大者
帖 子:325
专家分:435
注 册:2012-1-29
收藏
得分:0 
回复 6楼 风吹过b
为什么我声明了:Private WithEvents Label1 As Label

Private Sub Label1_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
红色部分不能用?用了就提示声明错误,如果去掉红色部分就不响应这个事件


把那个声明去掉就正常了,是怎么回事?

学习--------------学习-------------------学习--------------------!!
2013-06-09 17:16
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
你窗体上放一个 label1(0)。
就不用再去声明 Private WithEvents Label1 As Label 这个了。
这个一般用于 类 上面,一般控件不用这个。

红色部分,没看出哪个是红色部分。

另外,
Private WithEvents Label1 As Label
这个声明只能用于单个类,不能用于数组。

授人于鱼,不如授人于渔
早已停用QQ了
2013-06-09 17:36
味无味
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-10-11
收藏
得分:0 
风老师!我尝试过了,提示下标越界
2013-10-11 16:40
快速回复:创建多个label控件,不是数组,数量会有变化怎么弄的?
数据加载中...
 
   



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

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