【问题标题】:lifetime of combobox data bound to a dictionary绑定到字典的组合框数据的生命周期
【发布时间】:2017-02-01 22:01:02
【问题描述】:

我还是 .net 的新手。将应用程序从 vba 传输到 SQL server + vb.net。 我有一些组合框在表单加载时填充了每种语言和情况的数据。组合框的数据在语言类(库 dll 的一部分)中作为字典(整数、字符串)检索 我打算从语言类中的过程中填充组合框(MyComboBox 继承自 forms.combobox 并具有一些自定义属性):

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

我担心它不会起作用。 此代码是加载每个表单时调用的过程的一部分,一旦执行就会超出范围。 组合框中的绑定数据怎么样。它们是按值传输的,还是通过引用 ComboboxData 链接的,一旦被调用的过程返回控制权,它们就会丢失。如果是这样,还有另一种方法可以使用一对值动态填充组合框并显示外部类中的成员。

【问题讨论】:

  • 您写了“我很害怕,但它不会起作用。” - 您是否尝试过并发现了问题,或者您是否担心它可能不起作用?
  • CBO 显然是被传递给某个东西,因为它正在被投射。为什么会这样,在哪里,我们能看到吗
  • 致 Andrew,在之前的测试中,我有以下代码:
  • @Andrew 对不起,我想回答你,但还没有找到如何用代码回答结构化文本
  • @Plutonix,Ctrl 是“for Each Ctrl as Control in frm.Controls”中的一个控制变量,以便使用它我使用“如果 typeof ctrl is .... " 然后投射

标签: vb.net data-binding combobox


【解决方案1】:

1.我认为您无需担心 - 这是托管代码,一旦没有任何引用,GS 将清理所有内容。

2.总是先设置ValueMemberDisplayMemeber,否则你的组合框会产生双重作用。首先它试图弄清楚如何处理你的绑定源,然后它必须重新配置。

3.你可以使用简单的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.您想在打开表单时使用Using-End Using 构造,以确保它们消失并正确释放所有资源

5."...组合框中的绑定数据..." - 它不会被传输。就是这样 - 绑定。您在某处有列表,您可以将其用作dim a = cbo.DataSource。如果你不处理你的表单,它可能会在内存中存在一段时间。因此,请注意#4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-22
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多