2016-01-20 1 views
0
Imports System.Collections.Generic 
Imports System.Globalization 
Public Sub ListCountries(SourceCombo As System.Windows.Forms.ComboBox) 
     ' Iterate the Framework Cultures... 
     For Each ci As CultureInfo In CultureInfo.GetCultures(CultureTypes.AllCultures) 
      Dim ri As RegionInfo 
      Try 
       ri = New RegionInfo(ci.Name) 
      Catch 
       'If a RegionInfo object could not be created don't use the CultureInfo for the country list. 
       Continue For 
      End Try 
      ' Create new country dictionary entry. 
      Dim newKeyValuePair As New KeyValuePair(Of String, String)(ri.EnglishName, ri.ThreeLetterISORegionName) 
      ' If the country is not already in the countryList add it... 
      If Not countryList.ContainsKey(ri.EnglishName) Then 
       countryList.Add(newKeyValuePair.Key, newKeyValuePair.Value) 
       SourceCombo.Items.Add(ri.EnglishName) 
      End If 
     Next 
     SourceCombo.Sorted = True 

    End Sub 

Я добавил три комбинированные коробки в форму и трижды вызывал вышеупомянутую функцию для каждого поля со списком в событии загрузки формы. как: listcountries (ComboBox1) listcountries (ComboBox2) listcountries (ComboBox3)список всех стран в двух списках со списком в форме в vb.net

но первый выпадающий только перечисляет все страны, а две другие являются пустыми. пожалуйста, помогите мне, как это решить.

им с помощью vb.net 12 Конечных & окна 7

спасибо

+0

Ну, вы знаете, что этот код работает, так как он знает, как заполнить по крайней мере один выпадающий. Мы не видим код, который не работает. Посмотрите в окне «Вывод» уведомление об «первом случайном исключении». И следите за [этой неприятной ошибкой Windows 7] (http://stackoverflow.com/a/4934010/17034). –

+0

У вас есть глобальный экземпляр словаря, а второй вызов пропускается, потому что словарь был заполнен предыдущим вызовом. Но пропуская «Добавить в словарь», вы также пропустите вставку в поле со списком. – Steve

+0

любые альтернативные способы? –

ответ

0

Почему бы не вернуть список объектов страны и привязать к каждому выпадающему списку с использованием источника данных?

Также элементы добавляются в comboxbox, если в списке стран нет, поэтому необходимо удалить список стран. Он должен быть comboxbox.Items.Contains()

+0

, в какую строку я должен вставить этот код? –

0

Словарь CountryList является глобальным для вашего класса и инициализируется где-то перед вызовом этого метода. Таким образом, первый вызов находит словарь пустым и добавляет информацию как к словарю, так и к комбо, но второй вызов (и третий) находит словарь уже заполненным и, таким образом, не добавляет ничего ко второму (и третьему) комбо

Без воссоздании словарь каждый раз, когда вы вызываете этот метод, вы могли бы написать

Dim countryList as SortedDictionary(Of string, String) 

Public Sub ListCountries(SourceCombo As System.Windows.Forms.ComboBox) 
    If countryList Is Nothing Then 
     countryList = BuildCountryList() 
    End If 
    SourceCombo.DisplayMember = "Key" 
    SourceCombo.ValueMember = "Value" 
    SourceCombo.DataSource = New BindingSource(countryList, Nothing) 
    ' No need to sort anything   
End Sub 

Public Function BuildCountryList() As SortedDictionary(Of String, String) 
    Dim temp = New SortedDictionary(Of String, String) 
    For Each ci As CultureInfo In CultureInfo.GetCultures(CultureTypes.AllCultures) 
     Dim ri As RegionInfo 
     Try 
      ri = New RegionInfo(ci.Name) 
     Catch 
      'If a RegionInfo object could not be created don't use the CultureInfo for the country list. 
      Continue For 
     End Try 
     ' If the country is not already in the countryList add it... 
     If Not temp.ContainsKey(ri.EnglishName) Then 
      temp.Add(ri.EnglishName, ri.ThreeLetterISORegionName) 
     End If 
    Next 
    Return temp 
End Function 
+0

Когда я запускаю форму с вашими кодами, во всех выпадающих списках появляется строка «(Коллекции)». Ничего не добавлено. Пусто. –

+0

Это странно. Я проверил код, и он работает как есть. Можете ли вы показать, как вы называете этот код? – Steve

+0

ListCountries (ComboBox1) –