Vb.net 在Visual Basic中将对象列表添加到下拉组合框
我对VisualBasic非常陌生,主要是通过尝试和错误来创建的,但我已经尝试了大约5个小时了,没有运气。我正在尝试创建一个用于跑步者活动的程序。它有多种形式。创建跑步者和比赛有两种形式。然后将其存储在跑步者和比赛收集列表中。我想用种族收集列表中存储的种族填充一个下拉框。到目前为止,我要实现这一点的壁橱是显示“{}集合”的下拉列表。我尝试了.datasource、.add和.addRange。似乎都不管用 我的种族收集代码是:Vb.net 在Visual Basic中将对象列表添加到下拉组合框,vb.net,list,collections,combobox,Vb.net,List,Collections,Combobox,我对VisualBasic非常陌生,主要是通过尝试和错误来创建的,但我已经尝试了大约5个小时了,没有运气。我正在尝试创建一个用于跑步者活动的程序。它有多种形式。创建跑步者和比赛有两种形式。然后将其存储在跑步者和比赛收集列表中。我想用种族收集列表中存储的种族填充一个下拉框。到目前为止,我要实现这一点的壁橱是显示“{}集合”的下拉列表。我尝试了.datasource、.add和.addRange。似乎都不管用 我的种族收集代码是: Public Class RaceList Inherits
Public Class RaceList
Inherits System.Collections.CollectionBase
Public Sub Add(ByVal aRace As Race, Optional ByVal key As String = "NewRace")
List.Add(aRace)
End Sub
Public ReadOnly Property Item(ByVal index As Integer) As Race
Get
Return CType(List.Item(index), Race)
End Get
End Property
End Class
它应该只允许用户在列表中添加和返回种族
以下是允许用户将比赛添加到列表中的代码:
Public Class newRaceForm
Public Shared racelist As New RaceList
Private Sub uiBtnAddNewRace_Click(sender As System.Object, e As System.EventArgs) Handles uiBtnAddNewRace.Click
uiDTPRaceDate.Text = Today
Dim x As Date
Dim champ As Boolean = False
x = uiDTPRaceDate.Text
If uiCheckboxChampion.Checked = True Then
champ = True
End If
Dim race As New Race(x, champ)
uiCheckboxChampion.Checked = False
MsgBox("Race Added")
racelist.Add(race, race.uniqueRaceID)
End Sub
最后,这里是表单加载上的代码,它应该用racelist的内容填充框
Private Sub finishRaceForm_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim x = 0
Dim races As New RaceList
While x < races.Count
uiDropDownRace.Items.Add(races.Item(x).ToString)
x = x + 1
End While
End Sub
每当您向列表框或下拉列表中添加对象时,都会调用ToString函数,以确定要显示的内容 大多数对象默认将其类型名作为ToString函数返回。您可以使用ToString函数来显示所需的内容。在下面的示例中,我显示文本“竞赛编号x”,其中x是竞赛编号
Public Class Race
Private raceDate As String
Private isChampionship As Boolean
Public Shared RaceID As Integer = 0
Public uniqueRaceID As String
Sub New(ByVal x As String, champ As Boolean)
raceDate = x
If champ = True Then
isChampionship = True
Else
isChampionship = False
End If
RaceID = RaceID + 1
uniqueRaceID = "RaceID0" + RaceID.ToString
End Sub
Public Overloads Function ToString() As String
Return "Race Number " & RaceID.ToString()
End Function
End Class
我正在做一个类似的程序,并通过使用这个来实现它
Dim CmbAcro As String() = {"INSERT", "THE", "ITEMS", "YOU", "WANT", "TO", "ADD", "TO", "A", "COMBO", "BOX"}
Dim cmb As New DataGridViewComboBoxColumn()
cmb.HeaderText = "INSERT HEADER TEXT HERE"
cmb.Name = "INSERT NAME HERE"
cmb.MaxDropDownItems = 20
cmb.Sorted = True
For Each i In CmbAcro
cmb.Items.Add(i)
Next
DataGridView1.Columns.Add(cmb)
发生了什么故障,在哪里/在哪一行?完全没有故障或错误。它全部运行,我可以添加一个种族(我想),但当我进入下拉列表时,它从来没有填充任何内容,就我所见,只是一个空白的下拉列表,这是因为你没有用种族填充你的下拉字段(我想是组合框)。在form.load上,没有任何比赛,以后您就不会添加创建的比赛。这就是这个循环应该做的:
Private Sub finishRaceForm\u load(发送者作为System.Object,e作为System.EventArgs)处理MyBase.load Dim x=0 Dim races作为新的比赛列表,而x
,但这不是循环所做的。在执行Form.Load时,它检查races.count,看到它是零,将它与x进行比较,x是零到,甚至不进入循环。此外,Form.Load不是此作业的合适位置。您应该调用.Add的button_click()函数。欢迎使用堆栈溢出!感谢您提供了一个看似不错的答案。请随时查看帮助-->站点教程以获取免费徽章!在本例中,您将如何修改它以处理种族列表。我将newracelist作为新列表(比赛)
,当用户点击按钮创建比赛时,我将比赛传递给它。我想用比赛日期填充下拉列表或列表框。
Dim CmbAcro As String() = {"INSERT", "THE", "ITEMS", "YOU", "WANT", "TO", "ADD", "TO", "A", "COMBO", "BOX"}
Dim cmb As New DataGridViewComboBoxColumn()
cmb.HeaderText = "INSERT HEADER TEXT HERE"
cmb.Name = "INSERT NAME HERE"
cmb.MaxDropDownItems = 20
cmb.Sorted = True
For Each i In CmbAcro
cmb.Items.Add(i)
Next
DataGridView1.Columns.Add(cmb)