Альтернативы SelectedIndexChanged, которые не запускаются при загрузке формы? - PullRequest
4 голосов
/ 24 декабря 2009

Я занимаюсь разработкой в ​​VB.NET с Visual Studio 2005.

У меня есть ComboBox (myCombo) в форме, которая заполняется в методе Load.

Я также обработал myCombo.SelectedIndexChanged, чтобы изменить метку на форме.

Редактировать: Я добавил обработчик событий, дважды щелкнув поле со списком в конструкторе. Затем в виде кода появился код скелета.

Похоже, что происходит, когда форма загружается, SelectedIndexChanged срабатывает при каждом добавлении элемента в myCombo.

Это не то, что я хочу, но я думаю, что есть другой обработчик событий, который вызывается только тогда, когда пользователь меняет выбор.

Вот код для того, что у меня есть:

Private Sub myDlg_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    ' this is all I do with myCombo in this sub

    list = GetListOfItemsToAdd()
    myCombo.DataSource = list 
    myCombo.DisplayMember = "DisplayMember"
    myCombo.ValueMember = "ValueMember"

End Sub

Может ли кто-нибудь указать мне правильное направление?

Спасибо как всегда.

Обновление: Решением, которое я использовал, было удаление предложения Handles после генератора событий и добавление его перед «End Sub» выше:

AddHandler myCombo.SelectedIndexChanged, AddressOf myCombo_SelectedIndexChanged

Спасибо всем!

Ответы [ 3 ]

10 голосов
/ 24 декабря 2009

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

Из документации MSDN для SelectionChangeCommitted:

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

Однако обратите внимание, что существует ошибка, которая означает, что в некоторых случаях событие SelectionChangeCommitted не запускается (в частности: используйте клавиатуру, чтобы раскрыть список, выделите новый элемент, затем перейдите на другой элемент управления. Выбор изменено, но событие SelectionChangeCommitted не вызывается). Смотри http://connect.microsoft.com/VisualStudio/feedback/details/115189/selectionchangecommitted-event-sometimes-not-raised-by-combobox

На практике я обнаружил, что это не воспринимается пользователями как проблема, поэтому я продолжал использовать SelectionChangeCommitted, а не другие обходные пути, использующие SelectedIndexChanged. Но YMMV конечно.

5 голосов
/ 24 декабря 2009

Вы можете добавить обработчик событий только после загрузки данных. (Используя ключевое слово AddHandler)

1 голос
/ 24 декабря 2009

У вас может быть логическое значение, которое вы используете, чтобы определить, делаете ли вы изменения. Когда вы начнете менять предметы, установите его на true. Когда вы закончите, установите его на false. В обработчике событий вы можете протестировать логическое значение, чтобы определить, является ли пользователь инициатором изменений, и проигнорировать событие, если нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...