2017-01-31 32 views
1

我在.net中仍然是新的。將應用程序從vba傳輸到SQL Server + vb.net。 我有一些組合框填充表單加載每種語言和環境的數據。組合框的數據在一個語言類(庫dll的一部分)中作爲字典(Integer,String)檢索 我打算從語言類的過程中填充組合框(MyComboBox繼承自forms.combobox與一些自定義屬性):組合框數據的生存期綁定到字典

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

但我恐怕它不會工作。 此代碼是加載每個表單時調用的過程的一部分,並且一旦執行就會超出範圍。 組合框中的綁定數據如何?它們是按值轉移還是通過引用ComboboxData進行鏈接,並在被調用過程返回控制權後丟失。如果有的話,還有另一種方法可以通過外部類中的一對值和顯示成員動態地填充組合框。

+0

你寫道:「我害怕它不會工作。」 - 您是否嘗試過並發現問題,或者您擔心它可能無法正常工作? –

+0

CBO顯然正在被傳遞給某些東西,因爲它正在播出。爲什麼這樣,我們可以看到它 – Plutonix

+0

安德魯,在以前的測試中,我有以下代碼: –

回答

1

1.我不認爲你需要擔心 - 這是託管代碼,一旦沒有任何引用它,GS將清除所有內容。

2.總是設置ValueMemberDisplayMemeber首先,或者您的組合框使雙重工作。首先它試圖找出如何處理你的綁定源,然後它必須重新配置。

3.You可以使用發佈正確

5. 簡單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結構和所有資源「 ...組合框中的數據綁定...「 - 不會傳輸。它就是這樣。你有名單,你可以用它作爲dim a = cbo.DataSource。如果你不處理你的表單,它可能會在一段時間內存在內存中。因此,注意#4

+0

謝謝。你的答案正是我所需要的。 –