简单,在你把文本输入进text的同时,请把一个label的caption去等于text的内容,设置label自动适应大小,然后看label的宽度是多少就得到了Private Sub Command1_Click() Me.Label1.Caption = me.text1.text Me.Label1.AutoSize = True Debug.Print Me.Label1.width End Sub
'以下6行为字符宽度计算用,放在模块中.Type Size cx As Long cy As Long End Type Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long Declare Function GetTextExtentPoint32 Lib "gdi32" Alias "GetTextExtentPoint32A" (ByVal hdc As Long, ByVal lpsz As String, ByVal cbString As Long, lpSize As Size) As Long '以下所求字符宽度的步骤: Dim hdc5 As Long Dim sz As Size
Me.Label1.Caption = me.text1.text
Me.Label1.AutoSize = True
Debug.Print Me.Label1.width
End Sub
cx As Long
cy As Long
End Type
Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
Declare Function GetTextExtentPoint32 Lib "gdi32" Alias "GetTextExtentPoint32A" (ByVal hdc As Long, ByVal lpsz As String, ByVal cbString As Long, lpSize As Size) As Long
'以下所求字符宽度的步骤:
Dim hdc5 As Long
Dim sz As Size
SS = Me.文本1.Text
N = Len(SS)
hdc5 = GetDC(Screen.ActiveForm.hWnd)
Call GetTextExtentPoint32(hdc5, SS, N, sz) '取得该字元的长、宽
所求宽度 = sz.cx
dim b as long
a=text1.textwidth(text1.text)
b=text1.textheight(text1.text)
谁保证Text和Label这两个控件用的是同样的字体?合理的做法应该先把Label的字体及宽度设置成和Text一样!
至于用完后是否恢复原来字体大小看情况吧
(其实更安全的做法还要考虑它们所属容器的ScaleMode是否一致。
因为:F1帮助里写明了TextWidth的注意要点
字符串宽度是以对 object 有效的 ScaleMode 属性设置或通过 Scale 方法的坐标系统来表示的。)不知俺说的对不对?