我的问题与此类似:How to prevent ListBox.SelectedIndexChanged event?,但我想问一个不同的方法。ListBox.SelectedIndexChanged - 您可以确定它是否是用户启动的?
有没有一种简单的方法来确定'SelectedIndexChanged'是否来自用户,而不是通过代码(例如ListBox.SelectedIndex = x)发起?
我的问题与此类似:How to prevent ListBox.SelectedIndexChanged event?,但我想问一个不同的方法。ListBox.SelectedIndexChanged - 您可以确定它是否是用户启动的?
有没有一种简单的方法来确定'SelectedIndexChanged'是否来自用户,而不是通过代码(例如ListBox.SelectedIndex = x)发起?
据我所知,不,没有简单的内置方法。我已经能够做的最好的就是在代码改变之前设置一个标志,然后让事件处理程序重置标志并返回。
我想你可以开始检查调用堆栈,看看它是否在你自己的代码中的某个地方发起,但我不确定它值多少钱。
属性更改侦听器不区分属性更改的原因。这是一个常见问题。设置一个标志是做到这一点的方法。
我的确希望有一种方法可以在不触发属性更改事件的情况下设置值。但是,人们争辩说它打破了整个面向对象的模型,因为它有效地允许你直接改变一个字段,而不使用属性。
对我来说,'SelectionChangeCommitted'事件更适合我的目的。它会在选择下拉列表中的选择时触发。这是最终用户启动更改时处理特定情况的最简单方法。 SelectedIndexChanged是捕获所有情况。
优秀的答案。不幸的是,对我来说,Visual WebGUI并没有实现这个事件(VWG就像WinForms,但有时候不是)。而且,ListBox的甚至ToolStrip上的ComboBox也会出现同样的问题。尽管如此,仍然是一个很好的答案。谢谢(你的)信息。 – JustLooking 2010-07-21 21:56:52
+1写作我即将到来:D – Kyra 2010-06-18 17:33:04
这就是我的想法,但我抱着希望。因为,男人,我讨厌跳过篮筐,不得不跳过(设置标志等)。需要点击click和checkchanged(对于单选按钮)。除非有人告诉我们,否则你很快会有一个绿色的复选标记!谢谢。 – JustLooking 2010-06-18 17:37:37