3

我的问题与此类似:如何防止 ListBox.SelectedIndexChanged 事件?,但我想以不同的方式问它。

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

4

3 回答 3

4

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

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

于 2010-06-18T17:31:40.083 回答
4

对我来说,“SelectionChangeCommitted”事件更适合我的目的。It fires when a selection in the drop down is selected. 当最终用户发起更改时,这是处理特定情况的最简单方法。SelectedIndexChanged 是捕获所有情况。

于 2010-07-19T19:46:27.660 回答
2

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

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

于 2010-06-18T17:48:35.313 回答