King Boy Ответов: 4

Почему SelectedValueChanged повышается в 2 раза?


I really don't understand how it happens? I have a combobox with only 2 values in its Items list. I have a method associating with the SelectedValueChanged event of the combobox, but I have discovered that It can raise for 2 times whenever I change the selected value by choosing 1 of only 2 values of the combobox. While raising the event and calling the corresponding method associating with it, its value doesn't change (the value I chose). The value doesn't change after I change it but SelectedValueChanged raises for 2 times, one for when I finish changing its value, but when the other is for? My combobox has only 2 values that can be selected, if SelectedValueChanged raises consecutively for 2 times, it should return with its value before( for example, its values are 0 and 1, at first the selected value is 0, after 2 times the event raised it should be 0 not 1 in my case) but it doesn't. Can't understand. Could you please give me some idea on how and when it is possible.

Кроме того, на самом деле у меня есть несколько других comboboxes, событие SelectedValueChanged которых связано с тем же методом. И при изменении значений этих комбо-боксов событие обычно срабатывает только один раз, но чем они отличаются от нечетного комбо-бокса, о котором я уже упоминал? Мой нечетный combobox не имеет никаких привязок данных или каких-либо ассоциаций, которые могли бы изменить его значение, кроме как выбрав один из выпадающего списка!
Большое вам спасибо!

4 Ответов

Рейтинг:
35

King Boy

Ух ты! Я с уверенностью могу сказать, что сам нашел ответ на свой вопрос. Это очень просто.
Я связан метод на "странное" событие SelectedValueChanged выпадающий список в два раза!!! Вот почему, когда событие срабатывает, метод будет вызван дважды. Если вы сделаете то же самое с тремя, четырьмя или более разами, это будет вызов именно на такое время. Поэтому, если у вас есть та же проблема, перепроверьте, чтобы увидеть, связали ли вы метод больше одного раза с событием, конечно, могут быть и другие причины.
Ха-ха, я понял!
Благодаря себе!


Henry Minute

Молодец, что нашел причину, и молодец, что сообщил об этом здесь на благо других.

Я должен сказать, что это не то, что я мог бы предложить в качестве ответа, поскольку это не то, что я когда-либо делал.

Иметь 5 баллов репутации.

[no name]

Спасибо! Хихи! Просто для моих упорных попыток с циклом мышления, редактирования и тестирования!

Рейтинг:
18

Nish Nishant

Я знаю, что вы решили эту проблему сейчас, но вот вам подсказка на будущее. Если вы не создаете элемент управления динамически, рекомендуется всегда использовать конструктор для добавления обработчиков событий. Таким образом, вы не будете случайно добавлять его дважды. Возможно, вы не сможете следовать этому правилу везде, поэтому, если есть сценарии, в которых вы абсолютно обязаны добавить его в написанный пользователем код, убедитесь, что вы делаете все это в одном месте, чтобы было легче отлаживать.


Sergey Alexandrovich Kryukov

Нишант, ты, наверное, уже знаешь, что я бы категорически не согласился.
Дизайнер может сделать гораздо больше беспорядка, а также создать синтаксис, который труднее поддерживать.
Случайное добавление дополнительного обработчика событий вручную может быть результатом небрежности в дизайне и коде, что может повлечь за собой гораздо худшие проблемы, чем этот простой. Кроме того, добавление нескольких обработчиков к одному и тому же событию является важной функцией, имеющей ряд применений.
Уважительно,
--СА

Nish Nishant

Да, и я с тобой не согласен. :-)

Насколько это возможно, при создании WinForms я использую исключительно конструктор для добавления обработчиков событий к элементам управления временем разработки. Он держит все в одном месте и легче управлять.

[no name]

Я могу согласиться с SA, что использование конструктора полезно, когда события различных элементов управления должны быть связаны с различными методами. Но у меня есть сотни элементов управления (comboboxes в моем приложении), которые действуют таким же образом и могут использовать тот же метод, что и обработчик событий. Я должен использовать цикл, чтобы связать их события с одним и тем же методом! Как трудно сделать это, выбрав один и тот же метод для каждого события элемента управления с помощью окна свойств!
Во всяком случае, я научился, когда использовал конструктор и когда кодировал его!
Спасибо!

Nish Nishant

Да, у тебя особый сценарий. Но, как вы узнали на собственном горьком опыте, вы действительно совершили глупую ошибку (которую, к счастью, довольно скоро выяснили). Поэтому для сценариев, где вы можете использовать конструктор, я бы рекомендовал именно этот способ.

Рейтинг:
1

Addam Boord

Просто для дальнейшего использования для тех, кто попадает сюда, я также столкнулся с этой ошибкой в WPF, когда связанная коллекция ItemsSource изменяется в обработчике событий SelectionChanged. Например, если вы добавляете или удаляете значение, которое будет отображаться в поле со списком, то это может привести к непреднамеренному изменению выбора и повторному запуску события.


Рейтинг:
0

Abhinav S

Взгляните на это эта тема[^]. Это может помочь вам.


[no name]

Возможно, из-за моего низкого уровня я не смог найти никакой помощи с этой нитью! Хихи!
Я схожу с ума от массы ошибок, ожидающих меня в будущем во время кодирования и работы над моим проектом, это все время преследует меня! О боже мой! Как я мог продолжать! Я все еще студент со многими другими интересными предметами, я не хочу останавливать их все для этого проекта. Благослови меня и всех, кто любит меня.