我必须用现有应用程序中的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)))
还有其他方法可以达到这个目的吗?
答案 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类型实现此扩展。