好吧,所以我的编程有问题,我有三个checkedlistbox,一个名为" lstShows "第二个被称为" lstSeasons "第三个被称为" lstEpisodes "我有两个组合框,其中有季节和剧集,一个组合框被称为" cbSeasons "第二个被称为" cbEpisodes 。所以我想要做的是,当我按下 lstshows 中的项目时,我希望能够从 lstSeasons 中分配项目,以及何时我希望点击季节中的项目,我希望能够在 lstepisodes 中为其分配项目
例如,比方说,电视节目包含10个季节,所以我添加电视节目并为其分配10个季节,然后第1季,有20集,第2季有15集,我希望能够为每个不同的节目和季节添加项目。我一直在寻找每一个地方,但我找不到任何东西。
这是布局https://www.dropbox.com/s/u6xc3sb43ksq8qr/Capture.PNG?dl=0
我尝试做代码,我做了这个,但它不起作用。
Dim item As String = lstSeasons.SelectedItem
lstEpisodes.Items.Add(item)
我真的需要帮助。
谢谢。
答案 0 :(得分:0)
首先,您的数据必须存储在某处。 例如,每个节目可以有一个工作表,A列中的季节和每个季节的剧集都在同一行(从B列开始)。如果您不希望看到此数据,只需隐藏工作表。
所以,如果我理解正确,首先你要选择一个节目,然后这个节目的季节出现在第二个列表框中,然后当你选择一个季节时,本季的剧集出现在第三个列表框中。
首先,您需要将所有节目添加到第一个列表框中。在这里,我假设您有10个节目,它们相应的工作表是工作表(1)到工作表(10),并且工作表的名称是节目的名称(但您可以按照自己的意愿,将节目名称存储在特定单元格中的示例。
Dim showName as String
For i = 1 To 10
showName = Worksheets(i).Name
lstShows.AddItem showName
Next i
然后,要在选择特定节目时更改季节列表框,您可以执行以下操作:
Private Sub lstShows_Change()
Call Me.lstSeasons.Clear
showName = Me.lstShows.Value
Dim sh as Worksheet
Set sh = ThisWorkbook.Sheets(showName)
rowCount = sh.Cells(sh.Rows.Count,"A").End(xlUp).Row
Dim i As Integer
For i = 1 To rowCount
Me.lstSeasons.AddItem sh.Cells(i,1).Value
Next i
End Sub
要在选择特定季节时更改剧集列表框,您可以这样做:
Private Sub lstSeasons_Change()
Call Me.lstEpisodes.Clear
showName = Me.lstShows.Value
Dim sh as Worksheet
Set sh = ThisWorkbook.Sheets(showName)
rowCount = sh.Cells(sh.Rows.Count,"A").End(xlUp).Row
Dim colCount As Integer
Dim i As Integer
Dim j As Integer
For i = 1 To rowCount
If Me.lstSeasons.Value = sh.Cells(i,1).Value Then
colCount = sh.Cells(i, sh.Columns.Count).End(xlToLeft).Column
For j = 2 To colCount
Me.lstEpisodes.AddItem sh.Cells(i,j).Value
Next j
Next i
End Sub
希望这会有所帮助!
答案 1 :(得分:0)
我认为您需要做的第一件事就是放置一个多维数组来存储您的信息。 有关锯齿状阵列的更多详细信息:https://msdn.microsoft.com/en-us/library/hkhhsz9t(v=vs.90).aspx
所以你可以这样使用它,例如:
Dim shows(50)(50) As string
这将为您提供50个“节目”,每集50集。现在您可以根据需要更改使用该程序的那些。
现在进入插入其中的下一部分。您可以通过
指定值来修改它们 shows(1)(12) = "ep12nameofshow1"
如果您希望能够在运行时手动更改名称,可以将字符串指定为变量
现在您要将项目添加到列表框中!所以让我们通过一个很棒的for-loop
来讨论它For Each episode As String In shows(1) 'show number here
lstEpisodes.Items.Add(episode)
Next
请注意我没有测试过,因为我无法访问您的大部分代码,所以如果您遇到任何问题请通知我。
更新此代码应该正常运行:
1-在页面顶部添加此内容(在课堂声明下方)
Dim showEpisodes(99)(99)() As String
将其视为showEpisodes(Show#,Season#,Ep#)
2-为数组添加值。你如何做到这取决于你(使用文件,数据库或只是预定的值。你甚至可以把它们放在运行时。但这是另一个问题的另一个问题!)
3-将此部分添加到您的季节代码
For Each element As String In showEpisodes(lstShows.SelectedIndex)(lstSeasons.SelectedIndex)
lstEpisodes.Items.Add(element)
Next