VB.Net 如何防止列表框在加载时触发 selectedindexchanged selectedvaluechanged

VB.Net how to prevent listbox firing selectedindexchanged selectedvaluechanged on load

帮助,当我将数据源设置为列表框时,它会触发 selectedindexchanged 和 selectedvaluechanged。我怎样才能防止这种情况发生,因为这会一直将我的值重置为第一项

Dim SQLString As String
Dim dt As New DataTable
Dim Properties As New Properties
SQLString = "select v.attributevalue,v.value"
SQLString += " from Table "
SQLString += " Where v.attributename ='new_vehicle'"
SQLString += " order by v.value"
getDataBySQL(SQLString, dt)
lstCategory.ValueMember = "attributevalue"
lstCategory.DisplayMember = "value"
lstCategory.DataSource = dt
Dim i As Integer = ReadDataFromDatabase
If i <> 0 Then
    lstCategory.SelectedValue = i
End If
Private Sub lstCategory_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lstCategory.SelectedIndexChanged
End Sub
Private Sub lstCategory_SelectedValueChanged(sender As Object, e As EventArgs) Handles lstCategory.SelectedValueChanged
    SetDataToDatabase(lstCategory.SelectedValue.ToString)
End Sub

此外,当我将 valuemember 设置为列表框时,它会触发 selectedvaluechanged。

基本上我想读取数据库值,所以当我加载列表框时,它会将所选值切换为数据库中的值

变量i就是我要的selectedValue。

通常在开发应用程序时,我会创建一个名为 IsLoading 的布尔变量,并将其默认设置为 false。我将在任何可能正在加载数据的代码之前将其标记为 true,并在完成时将其标记为 false。在大多数情况下,这是在我的页面加载中。

Private Sub Form_Main_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    IsLoading = True

    'Code to load my data goes here

    IsLoading = False

End Sub

然后我会像这样将它添加到我的下拉列表中:

Private Sub lstCategory_SelectedValueChanged(sender As Object, e As EventArgs) Handles lstCategory.SelectedValueChanged
    If Not IsLoading Then
        SetDataToDatabase(lstCategory.SelectedValue.ToString)
    End If
End Sub

因此,如果 IsLoading 标志为假,代码将被允许 运行。

希望对您有所帮助。