VB的Label中若Caption过长,如何截短文本再加"..."?

2024-12-03 21:08:57
推荐回答(2个)
回答1:

缩短的函数(两个参数,第一个是控件名,第二个是总长度数字必须大于3):
Private Sub ShortLabel(a As Label, b As Integer)
If Len(a) > b Then a = Left(a, b - 3) & "..."
End Sub

调用方式(这样可以使label1变成7位,如果label1是1234567890那么就会变成1234...七位,如果小于或等于7位则不变):
Private Sub Command1_Click()
Call ShortLabel(Label1, 7)
End Sub

反正当你的lblTitle这个改变时就调用一次Call ShortLabel(lblTitle, 长度)即可

补充回答的:
jzmmy 说的没错,宽度跟label字符数量的对应关系是这样没错,不过忽略了字体大小的计算,由于字号大小跟FontSize之间的关系也太复杂(你可以试下Label1.FontSize = Label1.FontSize + 1)但其实Label1.FontSize并不是加了1,有时候加1,有时候加1.25,有时候加1.75,反正要根据原来的字体加的,所以无法计算关系,你需要自己确定好字体,然后自己计算下字符跟宽度之间的关系

如下(即使是I跟W宽度也一样的):
字体 宽度
小五(默认) 90
五号 105
小四 120
四号 150
。。。。(其他的自己试下吧,输入一个字符,使用label本身的AutoSise动态改变大小,然后看width多少就可以知道一个字符的宽度了)

那么,如果宽度设置为1000固定,然后字体大小不一定,上面的函数可以改为
Private Sub ShortLabel(a As Label, b As Integer)
Dim c As String, i As Long
c = a.Caption
i = 1
Do While a.Width > b
a = Left(c, Len(c) - i) & "..."
a.AutoSize = True
i = i + 1
If i = Len(c) Then Exit Do
Loop
End Sub

调用方式同上
Private Sub Command1_Click()
Call ShortLabel(Label1, 1000) '这里改为需要的宽度
MsgBox Label1.Width '这句测试下修改后label的宽度
End Sub

同上,lblTitle改变时调用Call ShortLabel(lblTitle, 宽度) ,另外,如果修改到1个字符宽度还是太大,那么保持1个字符加。。。的状态

回答2:

1。首先借用那个朋友的代码.

缩短的函数(两个参数,第一个是控件名,第二个是总长度数字必须大于3):
Private Sub ShortLabel(a As Label, b As Integer)
If Len(a) > b Then a = Left(a, b - 3) & "..."
End Sub

调用方式(这样可以使label1变成7位,如果label1是1234567890那么就会变成1234...七位,如果小于或等于7位则不变):
Private Sub Command1_Click()
Call ShortLabel(Label1, 7)
End Sub

反正当你的lblTitle这个改变时就调用一次Call ShortLabel(lblTitle, 长度)即可

至于你说的b这个值怎么来,可以这样
你可以通过frmMain(主窗口)的width属性来判断,窗口宽度变化的同时Caption显示的内容长短是不同的.
比如width=2000时,是7,
width=2500,时,是9.
通过规律写个公式,然后在form_resize过程里动态改变,祝你成功哦