是否可以在表单上创建类似即时窗口的内容?
我已尝试向文本框发送各种更新,但文本框上的更新速率似乎比使用Debug.Print
到即时窗口的速度慢得多。
最好告诉用户当他们等待处理某些内容时正在执行哪些操作(并且不会跳过某些操作,因为它们的处理速度比更新速率似乎允许的更快)。
答案 0 :(得分:2)
您可以设置文本框(或标签)文本,然后调用DoEvents
方法。
最后一次调用很重要,因为你正在执行一个很长的进程,屏幕只会在空闲时重绘。
或者,您可以使用状态栏通知您的进度:
SysCmd acSysCmdSetStatus, "Doing some long task, please wait..."
'Do your work
SysCmd acSysCmdSetStatus, ""
如果您可以衡量进度,则可以包含进度条。即处理记录集:
bk = rs.Bookmark
rs.MoveLast
r = SysCmd(acSysCmdInitMeter, caption, rs.RecordCount)
rs.Bookmark = bk
Do Until rs.EOF
'Do something
i = i + 1
If i Mod 10 = 0 Then 'Do not update the meter for every processed record
SysCmd acSysCmdUpdateMeter, i
End If
rs.MoveNext
Next
SysCmd acSysCmdRemoveMeter
答案 1 :(得分:1)
在过去,我曾尝试使用单个多行文本框作为滚动状态窗口,但在文本选择状态(.SelText
,.SelLength
时,它似乎非常挑剔, .SelLength
)。最后,我只使用了五(5)个单行文本框控件和#34;滚动"他们自己。
在以下屏幕截图中,文本框控件名为txtStatus4
,txtStatus3
,... txtStatus0
(从上到下)
以及更新该状态的代码" window" (实际上是一个Frame控件)
Private Sub UpdateStatus(StatusText As String)
Dim i As Long
For i = 4 To 1 Step -1
Me.Controls("txtStatus" & i).Value = Me.Controls("txtStatus" & i - 1).Value
Next
Me.txtStatus0.Value = StatusText
Me.Repaint
End Sub
答案 2 :(得分:1)
万一有人再次寻找这个,有一种方法可以做OP所要求的,没有多个文本框。
在表单上添加文本框。常规文本框可以。给它一个名字,比如txtLog。将其大小设置为足以显示一堆文本。
这是一个处理更新的子:
Private Sub WriteToLogText(strText As String, Optional blnClear As Boolean = False)
txtLog.SetFocus
If blnClear = True Then
txtLog = strText
Else
txtLog = txtLog.Text & Chr(13) & Chr(10) & strText
End If
End Sub
然后调用sub来写你的文字:
strMsg = "Warning: Commodity '" & Trim(drs("RawCommodity")) & "' is not mapped."
WriteToLogText strMsg