从列表框中选择一个项目以在另一个列表框中显示更多项目?

时间:2016-07-24 15:24:56

标签: listbox checkedlistbox

好吧,所以我的编程有问题,我有三个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)

我真的需要帮助。

谢谢。

2 个答案:

答案 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