2017-01-31 11 views
1

Я все еще новичок в .net. Перенос приложения из vba на сервер SQL + vb.net. У меня есть некоторые comboboxes, которые заполняются при загрузке формы с данными на язык и обстоятельство. Данные для combobox извлекаются в классе языка (часть библиотеки dll) в качестве словаря (Integer, String) Я намерен заполнить выпадающее поле из процедуры в классе языка, поскольку (MyComboBox наследует от forms.combobox с некоторыми пользовательскими свойствами):Срок службы данных combobox, привязанных к словарю

Dim cbo As MyComboBox = CType(Ctrl, MyComboBox) 
cbo.DataSource = New BindingSource(ComboboxData, Nothing) 
cbo.ValueMember = "Key" 
cbo.DisplayMember = "Value" 

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

+0

Вы писали: «Я боюсь, но это не сработает». - Вы пробовали его и находили проблему, или вы обеспокоены тем, что она не может работать? –

+0

То, что CBO явно передается во что-то, потому что его бросают. Почему это, где это и мы можем увидеть это – Plutonix

+0

Andrew, В предыдущем тесте у меня был следующий код: –

ответ

1

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

2.Восстановить ValueMember и DisplayMemeber во-первых, или ваш combobox выполняет двойную работу. Сначала он пытается понять, как обращаться с вашим источником привязки, тогда он должен перенастроить.

3.You можно использовать простые List<T>

Public class CboItem 
    Public Property Id As Integer 
    Public Property Name As String 
    Public Property Description As String 
End Class 

Dim listOfItems As New List(Of CboItem)() 
' load your list 
cbo.ValueMember = "Id" 
cbo.DisplayMember = "Name" 
cbo.DataSource = listOfItems 

cbo.SelectedIndex = 2 ' get third item 
MessageBox.Show(DirectCast(cbo.SelectedItem, CboItem).Description) 

4.you хочет использовать Using-End Using конструкции при открытии формы, чтобы убедиться, что они уходят, и все ресурсы, высвобождаемые правильно

5. " ... связанные данные в комбинированных ящиках ... " - он не передается. Это просто так. У вас есть список где-то, и вы можете использовать его как dim a = cbo.DataSource. И если вы не распорядитесь своей формой, она может долго жить в памяти. Поэтому обратите внимание на # 4

+0

спасибо. ваш ответ именно то, что мне нужно. –

 Смежные вопросы

  • Нет связанных вопросов^_^