标题:自动动态添加控件
只看楼主
yuk_yu
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:334
专家分:134
注 册:2009-3-16
结帖率:85.71%
已结贴  问题点数:20 回复次数:11 
自动动态添加控件
我有一个数据库有若干条记录(<100条),我希望将数据读取出来,按实际的数据条目数添加Label,能实现动态自动的增减,并很均匀分布在Form上。 最好所有label可以跟form大小变化大小。我的目的是可以实现目视化显示数据


基本效果如同编写计算器自动生成按钮一样,我不太会实现换行和自动分布!请大家指点

[此贴子已经被作者于2016-7-7 16:52编辑过]

搜索更多相关主题的帖子: 数据库 动态 记录 
2016-07-06 11:41
yuk_yu
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:334
专家分:134
注 册:2009-3-16
得分:0 
回复 楼主 yuk_yu
Dim Label() As Object
 Private Sub Form_Load()
 Dim i As Integer
 Dim nTop As Long
 
 ReDim Text(1 To 10)
 For i = 1 To 10
 Set Label(i) = Controls.Add("VB.Label", "Label" & CStr(i))
 Label(i).Height = 300
 Label(i).Top = nTop
 Label(i).Visible = True
 nTop = nTop + 30 * 15
 Next i
 
 End Sub
 

VB6可以,怎么实现?

问题主要是换行问题

[此贴子已经被作者于2016-7-6 17:01编辑过]

2016-07-06 16:03
yuk_yu
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:334
专家分:134
注 册:2009-3-16
得分:0 
回复 2楼 yuk_yu
群里怎么没有人愿意指点下的,再次请求大家帮帮忙!!
2016-07-07 16:31
不说也罢
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:39
帖 子:1481
专家分:4989
注 册:2007-10-7
得分:20 
简单写了一个例子,你参考下吧:
程序代码:
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim i As Integer
        Dim nTop As Long = 0, nLeft As Long = 0
        Dim Label(0 To 9) As Label
        For i = 0 To 9
            Label(i) = New Label
            Controls.Add(Label(i))
            With Label(i)
                .Left += nLeft
                .Height = 30
                .Top = nTop
                .BorderStyle = BorderStyle.FixedSingle
                .Visible = True
                .Text = "Label" & i
                nLeft += .Width + 10
                If nLeft + .Width >= Me.Width Then
                    nLeft = 0
                    nTop = nTop + 30 * 2
                End If
            End With
        Next i
    End Sub


[此贴子已经被作者于2016-7-8 17:00编辑过]


===================================================
讨厌C#的行尾的小尾巴;和一对大括号{ }
===================================================
2016-07-08 16:58
yuk_yu
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:334
专家分:134
注 册:2009-3-16
得分:0 
谢谢版主,我试试看!
2016-07-08 23:34
yuk_yu
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:334
专家分:134
注 册:2009-3-16
得分:0 
回复 4楼 不说也罢
版主,如果有更多的话怎么才能增加第三列呢?谢谢
2016-07-09 11:44
不说也罢
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:39
帖 子:1481
专家分:4989
注 册:2007-10-7
得分:0 
回复 6楼 yuk_yu
我也是醉了。
程序代码:

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.WindowState = FormWindowState.Maximized
        Dim i As Integer, num As Integer
        Dim nTop As Long = 0, nLeft As Long = 0
100:
        Try
            num = InputBox("请输入要加载的Lable数量")
        Catch ex As Exception
            MsgBox("请输入一个合法的整数")
            GoTo 100
        End Try

        Dim Label(0 To num - 1) As Label
        For i = 0 To num - 1
            Label(i) = New Label
            Controls.Add(Label(i))
            With Label(i)
                .Left += nLeft
                .Height = 30'将标签的高度设为30
                .Top = nTop
                .BorderStyle = BorderStyle.FixedSingle
                .TextAlign = ContentAlignment.MiddleCenter '设置文字居中对齐
                .Visible = True
                .Text = "Label" & i
                nLeft += .Width + 10'将标签的左右间距设为10
                If nLeft + .Width >= Me.Width Then '如果下一个Label将超出窗体的宽度,换行显示
                    nLeft = 0
                    nTop = nTop + .Height +15'将标签的行间距设为15
                End If
            End With
        Next i
    End Sub


===================================================
讨厌C#的行尾的小尾巴;和一对大括号{ }
===================================================
2016-07-10 09:03
yuk_yu
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:334
专家分:134
注 册:2009-3-16
得分:0 
回复 7楼 不说也罢
谢谢版主!!
2016-07-10 11:32
不说也罢
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:39
帖 子:1481
专家分:4989
注 册:2007-10-7
得分:0 
以下是引用yuk_yu在2016-7-10 11:32:40的发言:

谢谢版主!!

不客气啊,你贴子数量还可以,且有专家分,欢迎一起探讨,共同进步。
今晚正好闲来无事,对上面的代码也作了一点儿优化。顺便也为你这个任意添加的Label添加上单击事件的代码。如果有用就拿去吧。
程序代码:
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.WindowState = FormWindowState.Maximized
        Dim i, num As Integer
        Dim nTop As Long = 0, nLeft As Long = 0
100:
        Try
            num = InputBox("请输入要加载的Lable数量")
        Catch ex As Exception
            MsgBox("请输入一个合法的整数")
            GoTo 100
        End Try

        Dim Label(0 To num - 1) As Label '根据输入的指定数值定义Label对象

        For i = 0 To num - 1
            Application.DoEvents()'设置程序友好响应
            Label(i) = New Label
            Controls.Add(Label(i))
            With Label(i)
                .SetBounds(nLeft, nTop, 60, 30) '将标签的高度设为30,宽度设为60
                .BorderStyle = BorderStyle.FixedSingle
                .TextAlign = ContentAlignment.MiddleCenter '设置文字居中对齐
                .Text = "Label" & i
                .Tag = i '这个属性用来识别每个Label对象
                .Visible = True
                AddHandler Label(i).Click, AddressOf LabelClick '将刚创建的标签关联上单击事件
                '为即将创建的下一个标签设置坐标
                nLeft += .Width + 10 '将标签的左右间距设为10
                If nLeft + .Width >= Me.Width Then '如果下一个Label将超出窗体的宽度,换行显示
                    nLeft = 0
                    nTop += .Height + 15 '将标签的行间距设为15
                End If
            End With
        Next i
    End Sub

    Private Sub LabelClick(ByVal sender As System.Object, ByVal e As System.EventArgs) '自定义一个过程,用来响应各个标签对象的单击事件
        MsgBox("你点击了Label" & sender.Tag)
        Select Case sender.Tag
            Case 0 To 20
                sender.ForeColor = Color.Blue
            Case 21 To 40
                sender.ForeColor = Color.Red
            Case Else
                sender.ForeColor = Color.White
        End Select
        sender.Text = "我被点中了"
    End Sub


===================================================
讨厌C#的行尾的小尾巴;和一对大括号{ }
===================================================
2016-07-10 19:49
yuk_yu
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:334
专家分:134
注 册:2009-3-16
得分:0 
回复 9楼 不说也罢
谢谢版主!!!
2016-07-11 08:58



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-466687-1-1.html




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

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