Добавление TimeZoneInfo в Combobox и настройка SeletedItem ставят меня в тупик - PullRequest
1 голос
/ 17 марта 2012

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

'load up the combobox with all time zones
Dim tzCollection As ReadOnlyCollection(Of TimeZoneInfo) = TimeZoneInfo.GetSystemTimeZones()
cboClockTmZone1.DataSource = tzCollection

'the computers local time zone
Dim myZone As TimeZoneInfo = TimeZoneInfo.Local

'get the index of the local time zone in the collections
Dim idx As Integer = tzCollection.IndexOf(myZone)
Dim qdx As Integer = cboClockTmZone1.Items.IndexOf(myZone)

'set the time zone
'cboClockTmZone1.SelectedIndex = idx 'this works
cboClockTmZone1.SelectedIndex = qdx 'this does not

Так что, может быть, мое непонимание этого, но когда я связываю коллекцию со списком, она не заполняется объектами TimeZoneInfo.Другими словами, не каждый ли элемент списка типа TimeZoneInfo?Если так, то почему не работает назначение qdx?Я получаю -1, что означает, что он не смог найти объект часового пояса в комбинированном списке, но он может найти его в tzCollection.Я также экспериментировал с .SelectedItem, но это тоже не сработало.

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

1 Ответ

1 голос
/ 17 марта 2012

Вы столкнулись с ошибкой в ​​классе TimeZoneInfo.Они забыли переопределить метод Object.Equals ().Ошибка уже сообщена и должна быть исправлена ​​в следующей версии .NET.Не совсем уверен, что это делает для 4.5, это должно.

...