Component1:如何将DictionaryEntry对象添加到C1List作为项目?

时间:2018-04-18 10:32:53

标签: vb.net componentone

我必须用现有应用程序中的Component one C1List替换.net Listbox。以前它的项目添加如下。

 lstFrmType.Items.Add(New DictionaryEntry("False", 
                                   FormatPercent(-0.1234, 
                                   CInt(numFrmDecimalPlaces.Value), 
                                   TriState.True, 
                                   TriState.False, 
                                   TriState.False)))

但是对于组件一C1list,我可以看到它有新的mehtod AddItem(),但它只接受参数作为字符串。我无法添加DictionaryEntry对象。

 lstFrmType.AddItem(New DictionaryEntry("False", 
                                   FormatPercent(-0.1234, 
                                   CInt(numFrmDecimalPlaces.Value), 
                                   TriState.True, 
                                   TriState.False, 
                                   TriState.False)))

还有其他方法可以达到这个目的吗?

1 个答案:

答案 0 :(得分:1)

在未绑定模式下使用C1List时存在某些限制(AddItem仅在非绑定模式下可用)。在未绑定模式下,您无法使用DisplayMember / ValueMember,您在此处肯定需要使用DictionaryEntry对象。因此,最好使用绑定模式(DataMode = Normal)。您可以编写一个看起来好像我们正在使用AddItem的扩展程序,但在场景后面您可以将数据推送到列表的DataSource

Imports System.Runtime.CompilerServices
Imports C1.Win.C1List
Imports System.ComponentModel

Module C1ListExtensions
    <Extension()>
    Public Sub AddItem(ByVal list As C1List, ByVal item As DictionaryEntry)
        If list.DataMode = DataModeEnum.AddItem Then
            Throw New Exception("Need DataMode to be DataMode.Normal")
        Else
            If list.DataSource Is GetType(BindingList(Of Tuple(Of Object, Object))) Then
                ' Set DisplayMember and ValueMember to Item1 and Item2
                DirectCast(list.DataSource, BindingList(Of Tuple(Of Object, Object))).Add(New Tuple(Of Object, Object)(item.Key, item.Value))
            Else
                Throw New Exception("Implement your own DataSource here")
            End If
        End If
    End Sub
End Module

此方法的唯一限制是您必须按照DataSource类型实现此扩展。