TextBox在放到Form中以后,不管内容多少,总是占这么多的地盘,为什么不让它灵活些呢?
每当TextBox的内容修改好以后,就查看TextBox的行数是否变化。如果有改变的话,就把TextBox的位置调整到合适的位置。个可能的应用就是TextBox和MsFlexGrid配合使用的情况,可以动态修改高度。
程序的实现步骤如下:
①开启个新的工程。
②增加个TextBox(Text1),修改BorderStyle为0_Nome,MultiLine为True。
③在Form1的声明中增加:
Const EM_GETLINECOUNT=&HBA
Private Declare Function Message Lib"user32"Alias"SendMessageA"(ByVal hWnd As Long,ByVal wMsg As Long,ByVal wParam As Long,ByVal lParam As Long)As Long
Dim LastLine As Long'后的行数
Dim LineHeight'每行的高度
④在Form_Load过程中增加:
Private Sub Form_Load()
Set Me.Font=Text1.Font
LineHeight=Me.TextHeight("TT")
End Sub
⑤在Text1.Change中增加代码:
Private Sub Text1_Change()
Dim Ret As Long
Ret=SendMessage(Text1.hWnd,EM_GETLINECOUNT,0,0&)'取行数
If Ret<>LastLine Then
If Text1.Height+Text1.Top+LineHeight>Me.ScaleHeight And Ret>1 Then
If LastLine<=Ret-1 Then
Exit Sub'如果已经是大高度,保持
End If
LastLine=Ret-1'超过大高度Else
LastLine=Ret
End If
Text1.Height=LastLine*LineHeight'修改高度
End If
End Sub
⑥在Text1_GotFocus中增加代码:
Private Sub Text1_GotFocus()
LastLine=SendMessage(Text1.hWnd,EM_GETLINECOUNT,0,0&)
End Sub
⑦按F5开始运行。在TextBox中多打入几行,可以发现TextBox的高度会自动修改,甚至对剪贴操作也样有效。而在TextBox到了Form的大边缘后,就停止了扩张高度。