【问题标题】:Selecting an item from a listbox to show more items in another listbox?从列表框中选择一个项目以在另一个列表框中显示更多项目?
【发布时间】:2016-07-24 15:24:56
【问题描述】:

好的,所以我的编程有问题,我有三个复选框,一个叫做“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)

我真的需要这方面的帮助。

谢谢。

【问题讨论】:

  • 您是否一直在尝试将 ListItems 从 lstSeasons 添加到 cbSeasons?
  • 是 lstShows .Name 属性还是 .Caption 属性,如果是 .Name 尝试IstShows.AddItem [Item] 否则ListBox1.AddItem [Item] 应该这样做。 “ListBox1”当然只是一个例子。
  • 这不是我想要的,我想要的是,所以我在列表框中添加了一个新节目,然后将季节分配给 lstShow 中的选定项目,然后假设我还有另一个节目我添加了,然后当我按下那个节目时,我想为 lstshows 中的选定项目添加不同的季节。所以就像当我在节目之间切换时,季节项目和剧集项目也会相应地改变。
  • 你是在 vb.net 还是 vba 中编码?
  • 我在 vba windows 窗体中编码。

标签: listbox checkedlistbox


【解决方案1】:

首先,您的数据必须存储在某个地方。 例如,您可以为每个节目制作一个工作表,将季节放在 A 列中,并且每个季节的剧集位于同一行(从 B 列开始)。如果您不想看到这些数据,只需隐藏工作表即可。

所以如果我理解正确的话,首先你要选择一个节目,然后这个节目的季节出现在第二个列表框中,然后当你选择一个季节时,本季的剧集出现在第三个列表框中。

首先,您需要将所有显示的内容添加到第一个列表框中。在这里,我假设你有 10 个节目,它们对应的工作表是 Worksheets(1) 到 Worksheets(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

希望这会有所帮助!

【讨论】:

  • 代码显示所有红色下划线,并且我使用选中的列表框,代码不起作用。但是感谢您的帮助,如果可以的话,请查看此图像,尝试复制我拥有的内容并编写适用于您复制的程序的代码。这是我的名称布局。 dropbox.com/home?preview=Capture.PNG
【解决方案2】:

我认为您需要做的第一件事是放置一个多维数组来存储您的信息。 更多关于锯齿数组的详细信息: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 循环来回顾一下吧

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

【讨论】:

  • hi zaid,感谢您的帮助,但该代码由于某种原因无法正常工作,如果您愿意,我可以给您程序,您可以实时测试正确的代码,我试过了到处找,但我认为你是我所需要的。这是程序,请尝试一下:dropbox.com/s/vavoey39bbgahqk/SHOWBOX.rar?dl=0
  • 今晚我可以帮你查一下。我现在有点忙。但我答应你今晚检查一下!
  • 非常感谢 zaid,如果你成功了,你就是我的英雄和传奇。再次感谢。
  • 您找到解决方案了吗?因为我真的需要它。谢谢。
  • 你能检查一下并尝试一下代码吗,我的学校项目真的需要它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-28
  • 1970-01-01
  • 2013-10-21
  • 2020-07-29
相关资源
最近更新 更多