我的问题与此类似:How to prevent ListBox.SelectedIndexChanged event?,但我想以不同的方式提出问题。
是否有一种简单的方法可以确定'SelectedIndexChanged'是来自用户而不是通过代码启动(例如ListBox.SelectedIndex = x)?
答案 0 :(得分:4)
据我所知,不,内置没有简单的方法。我能做的最好的事情是在代码中更改之前设置一个标志,然后让事件处理程序重置标志并返回。
我想你可以开始检查调用堆栈,看看它是否源自你自己的代码中的某个地方,但我不确定它的价值是多少。
答案 1 :(得分:3)
对我来说,'SelectionChangeCommitted'事件更适合我的目的。选中下拉列表中的选项时会触发它。当最终用户启动更改时,这是处理特定情况的最简单方法。 SelectedIndexChanged用于捕获所有案例。
答案 2 :(得分:2)
属性更改侦听器不区分属性更改的原因。这是一个常见问题。设置标志是这样做的方法。
我确实希望有一种方法可以在不触发属性更改事件的情况下设置值。但是,人们认为它打破了整个面向对象的模型,因为它有效地允许您直接更改字段,而无需使用属性。