在VB中如何动态的去生成一个Label控件

在VB中如何动态的去生成一个Label控件,第1张

Dim l1 As Label

Set l1 = Me.Controls.Add("VB.Label", "l1")

l1.Caption = "我是动态创建的Label控件"

l1.Left = 300

l1.Top = 150

l1.Visible = True

适用于VB6

需要一点,数学知识:画个图,容易理解:

如图分析:

第1行第1列控件Label1(0)的Left和Top

Label1(0).Left = L

Label1(0).Top = T

Label1(0).Width = 宽

Label1(0).Height = 高

并设控件之间的行距,列举分别为:V,H

那么:

            第1列                                 第2列                                     第3列

第1行    Label1(0).Left = L               Label1(1).Left = L + 宽 + H          Label1(2).Left = L + 2 * (宽 + H)

       Label1(0).Top = T                Label1(1).Top = T                    Label1(2).Top = T

 

第2行    Label1(3).Left = L               Label1(4).Left = L + 宽 + H          Label1(5).Left = L + 2 * (宽 + H)

       Label1(3).Top = T + 高 + V       Label1(4).Top = T + 高 + V           Label1(5).Top = T + 高 + V

第3行    Label1(6).Left = L               Label1(7).Left = L + 宽 + H          Label1(8).Left = L + 2 * (宽 + H)

       Label1(6).Top = T + 2*(高 + V)   Label1(7).Top = T + 2*(高 + V)       Label1(8).Top = T + 2*(高 + V)

第4行    Label1(9).Left = L               Label1(10).Left = L + 宽 + H         Label1(11).Left = L + 2 * (宽 + H)

       Label1(9).Top = T + 3*(高 + V)   Label1(10).Top = T + 3*(高 + V)      Label1(11).Top = T + 3*(高 + V)

。。。。。。

所以:

下标为 i 的控件的 Left、Top属性为?:

确定其列号的方法:(i Mod 3) + 1,其Left属性为:Label1(i).Left = L + (i Mod 3) * (宽 + H)

确定其行号的方法:(i \ 3) + 1,其Top属性为:Label1(i).Top = T + (i \ 3) * (高 + V)

这是不可避免的,除非更换电脑硬件,让处理器及内存处理得更快,或是不要用自带的 Panel 和 Label 控件,自定义一个容器,内容自绘。

卡顿主要原因:

1、控件多了,电脑必然会慢,因为在 Windows 里每个控件都相当于一个窗口,有自己的句柄,系统需要维护对应的窗口消息,那么一定会卡顿,只能缓解不能消除。

2、可以用多线程,在子线程中更新控件,通过委托的方式通知主线程,可以有效缓解卡顿的问题。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11790151.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-18
下一篇2023-05-18

发表评论

登录后才能评论

评论列表(0条)

    保存