【发布时间】:2016-10-24 00:33:39
【问题描述】:
我得到一个包含要绑定到组合框的数据的 XML。每次将项目添加到组合框时绑定此数据时,都会触发其更改事件。我只想在数据绑定并且用户选择任何项目后触发更改事件。
任何帮助,可以解决这个问题的代码?
【问题讨论】:
我得到一个包含要绑定到组合框的数据的 XML。每次将项目添加到组合框时绑定此数据时,都会触发其更改事件。我只想在数据绑定并且用户选择任何项目后触发更改事件。
任何帮助,可以解决这个问题的代码?
【问题讨论】:
使用标志来表示是否要处理事件;
private mblIsUpdating as boolean
...
sub addDataFromXml
mblIsUpdating = true
combo.additem ...
mblIsUpdating = false
end sub
sub combo_change
if (mblIsUpdating) then exit function
//handle change
end sub
【讨论】:
根据我的经验,如果组合框的值不为空,则组合框更改事件仅在更改项目的组合框列表时触发。如果在首次初始化组合框时出现此问题,请在填充组合框之前不要分配默认值。
如果您需要在其他时间更改组合框列表,如 Alex K 所说,请创建一个布尔标志来指示您是否要忽略更改事件。
我不清楚您的问题是在填充组合框时触发一次更改事件,还是为每个.AddItem 触发一次。如果是后一个问题,那么您可以通过为您的组合框创建一个值数组并将其分配给组合框的.List 来减少更改事件的数量。
这是一个二维数组的示例,该数组使用所有打开的工作簿的名称和路径填充组合框。 (一维数组也可以。)
Private Sub InitializeComboBox()
Dim aList() As String
Dim i As Integer, iMax As Integer
' build combobox list with zero-based array
iMax = Application.Workbooks.Count - 1
ReDim aList(iMax, 2)
For i = 0 To iMax
With Application.Workbooks(i + 1)
aList(i, 0) = i
aList(i, 1) = .Name
aList(i, 2) = .Path
End With
Next i
With Me.ComboBox1
.ColumnCount = 3
.ColumnWidths = "0 pt;80 pt;220 pt"
.ListWidth = "300 pt"
.List = aList
End With
End Sub
【讨论】: