views:

179

answers:

3

My question is similar to this: http://stackoverflow.com/questions/905447/how-to-prevent-listbox-selectedindexchanged-event, but I want to ask it a different way.

Is there a simple way to determine if the 'SelectedIndexChanged' is coming from the user as opposed to initiated through code (e.g. ListBox.SelectedIndex = x)?

+3  A: 

As far as I know, no, there's no simple way built-in. The best I've been able to do is set a flag just before changing it in code and then letting the event handler reset the flag and return.

I suppose you could start examining the call stack and see if it's originating somewhere in your own code or not, but I'm not sure how much it's worth the effort.

lc
+1 for writing what I was about to :D
Kyra
That's what I thought, but I was holding out hope. Because, man, I hate jumping through the hoops you have to jump through (setting flags, etc). There needs to be something like click versus checkchanged (for radiobuttons). Unless someone tells us otherwise, you'll soon have a green check-mark! Thanks.
JustLooking
+1  A: 

Property change listeners don't distinguish between causes of a property change. It's a common problem. Setting a flag is the way to do it.

I do wish that there was a way to set values without firing property change events. But then, people argue that it breaks the whole object-oriented model, because it effectively allows you to change a field directly, without using a property.

+2  A: 

For me, the 'SelectionChangeCommitted' event was better suited for my purposes. It fires when a selection in the drop down is selected. This is the easiest way to handle the specific case when the end-user initiates the change. SelectedIndexChanged is to capture all cases.

Eric
Excellent answer. Unfortunately, for me, Visual WebGUI does not implement that event (VWG is like WinForms, but sometimes not). And, the same issue would arise for ListBox's, or even the ComboBox on the ToolStrip. Nonetheless, still a good answer. Thanks for the info.
JustLooking