2016-04-12 13 views
0
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 

これは正常に動作します、しかし、私はそれを実行したときに知りません。論理的には、これはテキストフィールドに新しい行が追加されたときに実行する必要がありますが、これがいつ発生するかを検出する方法はありません...

したがって、ダイアログボックスのサイズを動的にする方法はありますか?私はおそらくここで死んでいると知っていますが、質問するのは価値があると思ったのです。

答えて

0

テキストフィールドを "ネイティブOSスタイル"に変更してください。次に、最大高さを定義すると、ダイアログが正確に正しいサイズになります。スクロールバーが自動的にテキストフィールドに表示され、ダイアログボックスのサイズを変更する必要はありません。

Screenshot of field properties

+0

私はいくつかの理由で、まだフィールドタイプを変更するに出くわしたことはありません...ありがとうございました。 – Lesic

関連する問題