获取文本字段的高度或行数

Get height or amount of lines of a text field

rc = ws.DialogBox("SomeForm",True,True,,,,,,doc,True)

我有一个带有文本字段的对话框。问题是当用户输入太多文本时(文本字段中添加了太多新行),它将超出对话框的大小并且不再显示。到目前为止唯一的解决办法是重新打开对话框,这将重新计算对话框的大小。

所以我首先尝试添加一个垂直滚动条:

rc = ws.DialogBox("SomeForm",True,,,,,,,doc,True)

然而,这也添加了一个水平滚动条,这是完全没有必要的。

我的下一个方法是使用 WIN-API:

手动设置大小
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (Byval lpClassName As Any, Byval lpWindowName As Any) As Long
Declare Function SetWindowPos Lib "user32" (Byval hwnd As Long, Byval hWndInsertAfter As Long, Byval x As Long, Byval y As Long, Byval cx As Long,Byval cy As Long, Byval wFlags As Long) As Long
Const SWP_NOMOVE = &H2

Dim myhWnd As Long
myhWnd = FindWindow("#32770", "Lotus Notes")
SetWindowPos myhWnd, -1, 0, 0, 617, 311, SWP_NOMOVE

这很好用,但是我不知道什么时候执行它。从逻辑上讲,当在文本字段中添加新行时,这必须 运行,但我无法检测何时发生...

那么,有什么方法可以使我的对话框在大小方面动态变化吗?我知道我可能在这里走到了死胡同,但我认为值得一试:)

只需将文本字段更改为 "Native OS style" 类型。然后你定义了一个最大高度,Dialog 就变成了正确的大小。滚动条随后会自动出现在文本字段中,并且对话框不必更改大小。