ListBox.SelectedIndexChanged - 你能确定它是否是用户发起的?

时间:2010-06-18 17:24:43

标签: c# winforms events listbox selectedindexchanged

我的问题与此类似:How to prevent ListBox.SelectedIndexChanged event?,但我想以不同的方式提出问题。

是否有一种简单的方法可以确定'SelectedIndexChanged'是来自用户而不是通过代码启动(例如ListBox.SelectedIndex = x)?

3 个答案:

答案 0 :(得分:4)

据我所知,不,内置没有简单的方法。我能做的最好的事情是在代码中更改之前设置一个标志,然后让事件处理程序重置标志并返回。

我想你可以开始检查调用堆栈,看看它是否源自你自己的代码中的某个地方,但我不确定它的价值是多少。

答案 1 :(得分:3)

对我来说,'SelectionChangeCommitted'事件更适合我的目的。选中下拉列表中的选项时会触发它。当最终用户启动更改时,这是处理特定情况的最简单方法。 SelectedIndexChanged用于捕获所有案例。

答案 2 :(得分:2)

属性更改侦听器不区分属性更改的原因。这是一个常见问题。设置标志是这样做的方法。

我确实希望有一种方法可以在不触发属性更改事件的情况下设置值。但是,人们认为它打破了整个面向对象的模型,因为它有效地允许您直接更改字段,而无需使用属性。