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

VB.Net如何防止列表框在加载时触发selectedindexchanged selectedvaluechanged,vb.net,listbox,Vb.net,Listbox,帮助,当我将datasource设置为listbox时,它会激发selectedindexchanged和selectedvaluechanged。我如何防止这种情况发生,因为这会一直将我的值重置为第一项 Dim SQLString As String Dim dt As New DataTable Dim Properties As New Properties SQLString = "select v.attributevalue,v.value" SQLString += " from

帮助,当我将datasource设置为listbox时,它会激发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
Dim SQLString作为字符串
Dim dt作为新数据表
将属性设置为新属性
SQLString=“选择v.attributevalue,v.value”
SQLString+=“来自表”
SQLString+=“其中v.attributename='new_vehicle'”
SQLString+=“按v.value排序”
getDataBySQL(SQLString,dt)
lstcontegory.ValueMember=“attributevalue”
lstcontegory.DisplayMember=“值”
lstcontegory.DataSource=dt
Dim i为整数=ReadDataFromDatabase
如果我是0那么
lstCategory.SelectedValue=i
如果结束
私有子lstcegory\u SelectedIndexChanged(发送方作为对象,e作为事件参数)处理lstcegory.SelectedIndexChanged
端接头
私有子lstcegory\u SelectedValueChanged(发送方作为对象,e作为事件参数)处理lstcegory.SelectedValueChanged
SetDataToDatabase(lstCategory.SelectedValue.ToString)
端接头
此外,当我将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标志为false,则代码将被允许运行


希望这有帮助。

是的。这很简单,而且会起作用。我想知道是否有像SelectedChangeCommitted这样的等价物。。。谢谢你的建议。