由于我需要禁用(灰显)ListBox 中的某些项目,因此我使用了可以在此处找到的自定义控件:
这是我当前的代码:
Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
dtp.Columns.Add("key")
dtp.Columns.Add("value")
PopulateDataTable(dtp, "myTxt")
_dataView = New DataView(dtp)
'Custom ListBox
List1.ValueMember = "key"
List1.DisplayMember = "value"
List1.DataSource = _dataView
'Legacy ListBox
List2.ValueMember = "key"
List2.DisplayMember = "value"
List2.DataSource = _dataView
UpdateLanguageMenu()
End Sub
Private Function PopulateDataTable(dt As DataTable, resTxt As String)
Using sw As New StringReader(My.Resources.ResourceManager.GetObject(resTxt))
Do
Dim line As String = sw.ReadLine
If line Is Nothing OrElse line.Trim = String.Empty Then Exit Do
Dim strArr() As String
strArr = line.Split(",")
Dim row As DataRow = dt.NewRow()
row("key") = strArr(0)
row("value") = strArr(1)
dt.Rows.Add(row)
Loop
sw.Close()
End Using
End Function
List1
是Custom ListBox,List2
是VS2012E自带的ListBox。
我不需要List2
,它只是用来测试,在运行时,我List2
正确加载了所有值,而不是在所有行中。List1
System.Data.DataRowView
奇怪的是,我正在加载的 txt 是这样的:
00A1,MyValue1
00A2,Myvalue2
00A3,MyValue3
我还有一个标签,当在 ListBox 上选择项目时,我有代码将其更改Label.Text
为List.SelectedValue
逗号之前的第一部分。
它会显示在标签中。只有自定义列表框内的项目不被显示。
手动填充List1
,而不是使用 DataTable,正在工作。
而且由于我是初学者,我无法找到问题所在。