将数据加载到组合框中的速度很慢

G M*_*ros 3 vb6 performance combobox

我有一个带搜索屏幕的VB6应用程序.在搜索中,我有9个组合框.有些组合框只有几个项目,但有些只有几百项.填充数据需要很长时间(几秒钟).

每个组合框配置相同:Sorted = False,Style = 2 - 下拉列表

3个组合框少于20个项目.1有130件商品.4有大约250项1有近700项.

我用类似的代码填充所有九个组合框.

While Not RS.EOF

    cmbX.List(i) = RS("Description")
    cmbX.ItemData(i) = RS("Id")

    i = i + 1

    RS.MoveNext
Wend
Run Code Online (Sandbox Code Playgroud)

我尝试设置Visible = False,但它对性能没有影响.

是否有另一种方法来填充比我现有方法更好的组合框?

Rob*_*vey 8

这是你可以尝试的东西.根据这篇文章,您可以使用Windows API函数填充组合框而不是通常的AddItem方法,从而节省大约60%的开销:

Private Const CB_ERR As Long = -1
Private Const CB_ADDSTRING As Long = &H143
Private Const CB_RESETCONTENT As Long = &H14B
Private Const CB_SETITEMDATA As Long = &H151

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal _
hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Public Sub AddItem(cmb As ComboBox, Text As Variant, Optional ItemData As Long)

   Dim l As Long
   Dim s As String

   If VarType(Text) = vbString Then
      s = Text
   Else
      s = Trim$(Str$(Text))
   End If

   l = SendMessage(cmb.hwnd, CB_ADDSTRING, 0&, ByVal s)
   If l <> CB_ERR Then
      SendMessage cmb.hwnd, CB_SETITEMDATA, l, ByVal ItemData
   End If

End Sub

Public Sub Clear(cmb As ComboBox)
   SendMessage cmb.hwnd, CB_RESETCONTENT, 0, 0&
End Sub
Run Code Online (Sandbox Code Playgroud)

您可以通过省略函数调用并直接调用API函数来减少一些.


Kre*_*dns 5

您确实需要重新考虑您的设计。没有用户愿意在组合框中的 700 个项目中进行选择。如果您不纠正它,它会让您的应用程序显得混乱。

当我听到这样的情况时,我的脑海中总会浮现出这样的画面: