如何避免Combobox选中同一项时SelectedIndexChanged事件重复触发
问题说明
你遇到的是WinForm中ComboBox控件的原生行为:即使用户点击的是已经处于选中状态的条目,SelectedIndexChanged事件仍然会触发,官方没有提供内置参数可以直接关闭该触发逻辑。
实现方案
你想到的通过存储旧选中索引做对比的方案是该场景下最稳妥、实现成本最低的解决方案,修改后的代码如下:
Public NotInheritable Class FormMain ' 定义私有变量存储上一次有效的选中索引,初始值设为-1(未选中状态) Private _lastSelectedIndex As Integer = -1 Private Sub FormMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load ComboBox1.Items.AddRange({"1", "2", "3"}) End Sub Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged Dim currentIndex = ComboBox1.SelectedIndex ' 仅当选中索引有效、且和上一次索引不一致时才执行业务逻辑 If currentIndex <> -1 AndAlso currentIndex <> _lastSelectedIndex Then Debug.WriteLine("Something happening here") Select Case currentIndex Case 0 TextBox1.Text = "1" Case 1 TextBox1.Text = "2" Case 2 TextBox1.Text = "3" End Select ' 逻辑执行完成后更新旧索引记录 _lastSelectedIndex = currentIndex End If End Sub End Class
该方案同时兼容手动点击选择、代码动态修改选中项两种场景,不需要额外做适配处理。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

