Выбор элемента из списка, чтобы показать больше элементов в другом списке?

Итак, у меня проблема с моим программированием, у меня есть три проверенных списка, один называется «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)

Мне действительно нужна помощь с этим.

Спасибо.


person Yousi    schedule 24.07.2016    source источник
comment
Вы застряли, пытаясь добавить ListItems из lstSeasons в cbSeasons?   -  person Andrew Mortimer    schedule 24.07.2016
comment
Is lst показывает свойство .Name или свойство .Caption. Если это .Name, попробуйте IstShows.AddItem [Item], иначе ListBox1.AddItem [Item] должен это сделать. «ListBox1» — это, конечно, только пример.   -  person Benno Grimm    schedule 24.07.2016
comment
это не то, что я хочу, это то, что я хочу, поэтому я добавляю новое шоу в список, а затем назначаю сезоны выбранному элементу из lstShow, а затем, скажем, у меня есть другое шоу, которое я добавил, а затем, когда я нажмите на это шоу, я хочу добавить разные сезоны к выбранному элементу из lstshows. например, когда я переключаюсь между шоу, элементы сезонов и элементы эпизодов также меняются в соответствии с этим шоу.   -  person Yousi    schedule 24.07.2016
comment
Вы кодируете в vb.net или vba?   -  person user3598756    schedule 24.07.2016
comment
Я кодирую в формах vba windows.   -  person Yousi    schedule 25.07.2016
comment
Зачем вам нужны ComboBox и ListBox для сезонов и эпизодов? Вы можете просто изменить RowSource для lstSeasons при нажатии lstShows и изменить RowSource для lstEpisodes при нажатии lstSeasons . Сложность заключается в том, что когда вы переключаетесь между сезонами/шоу, хотите ли вы, чтобы предварительно выбранные элементы оставались отмеченными.   -  person PatricK    schedule 25.07.2016
comment
да, я хочу, чтобы предварительно выбранные элементы оставались нажатыми и показывали разные эпизоды для каждого выбранного сезона, я не знаю, как это сделать, не могли бы вы мне помочь. плохо объяснить, что я хочу.   -  person Yousi    schedule 25.07.2016
comment
да, я хочу, чтобы предварительно выбранные элементы оставались нажатыми и отображали разные эпизоды для каждого выбранного сезона. Итак, во-первых, я хочу добавить несколько телешоу в lstshows, а затем, когда шоу выбрано, я хочу назначить сезоны для этих шоу из lstshows, и я хочу назначить для каждого выбранного элемента в lstseasons эпизоды, которые содержит сезон, например, сезон 1 содержит 15 серий, затем я нажимаю на сезон 2 и хочу показать, скажем, 20 серий для сезона 2/ Изображение макета dropbox.com/s/u6xc3sb43ksq8qr/Capture.PNG?dl=0   -  person Yousi    schedule 25.07.2016
comment
Я кодирую в vba-формах Windows: но элемент управления checkedlistbox, насколько мне известно, недоступен для VBA, хотя он доступен для Visual Basic (.NET). Если вы подтвердите это, удалите тег VBA или состояние, которое вы хотите перейти на VBA.   -  person user3598756    schedule 25.07.2016
comment
@ user3598756, не могли бы вы помочь мне с кодом, и я уверен, что это VBA, потому что это школьный проект, и мы изучаем VBA только в школе.   -  person Yousi    schedule 25.07.2016
comment
покажите свой код, чтобы мы могли увидеть, какие элементы управления вы на самом деле используете и где вы застряли   -  person user3598756    schedule 25.07.2016
comment
@user3598756 user3598756 Я не знаю, как сделать код для этого, я пытаюсь сделать программу для своего школьного проекта, которая позволит пользователю добавлять телешоу по своему выбору и добавлять сезоны и эпизоды вручную. Я сделал для этого все, кроме списка. фото программы. dropbox.com/s/u6xc3sb43ksq8qr/Capture.PNG?dl=0 вы видите lstSeasons, lstshows и lstepisodes. что я хочу сделать, так это, когда пользователь добавляет телешоу по своему выбору, я хочу иметь возможность добавлять несколько телешоу и подключать сезоны и эпизоды к этому телешоу, поэтому, например, я добавляю 2 телешоу -- --›   -  person Yousi    schedule 25.07.2016
comment
@user3598756 user3598756 я добавляю, скажем, 2 телешоу, а затем я хочу выбрать первое, когда выбран выбранный элемент в lstshows, я хочу иметь возможность добавлять сезоны к этому выбранному элементу, а когда сезон выбран из lstSeasons, я хочу иметь возможность назначать эпизоды выбранному элементу из lstSeasons. и т. д. и т. д., поэтому, если у меня есть 20 телешоу в lstShows, я хочу иметь возможность назначать разные сезоны и эпизоды для каждого элемента, поэтому, когда я перехожу к другому выбранному элементу телешоу, тогда этот конкретный сезон телешоу и эпизоды появятся.   -  person Yousi    schedule 25.07.2016
comment
Я сделал для этого все, кроме списка: опубликуйте свой код до сих пор   -  person user3598756    schedule 25.07.2016
comment
@user3598756user3598756хочешь мой код целиком?   -  person Yousi    schedule 25.07.2016
comment
@user3598756 user3598756 я поместил его в txtFile. Взглянем. dropbox.com/s/73hl3a1cycdk1jn/CODE.txt?dl=0< /а>   -  person Yousi    schedule 25.07.2016
comment
ваш код начинается с Imports System.IO -> это VB.NET, а не VBA. Я снимаю тег VBA   -  person user3598756    schedule 25.07.2016
comment
@user3598756 user3598756 хорошо, я не очень опытный, так что простите мою ошибку, купите, вы видели мой код, и вы можете помочь мне с тем, чего я хочу достичь? если хотите, я могу выслать вам всю программу в zip-архиве. Спасибо за ваш ответ.   -  person Yousi    schedule 25.07.2016
comment
Я не привык к VB.NET и не хочу! (Я бы предпочел перейти на С#). Что касается не очень опытного кодера, ваш код кажется мне довольно длинным и сложным: вы действительно кодировали его или где-то сделали форму для копирования и вставки?   -  person user3598756    schedule 25.07.2016
comment
@ user3598756 Мне сейчас 12 лет, и это мой первый год на vb.net, я написал все с нуля, кроме функций сохранения и импорта. как вы думаете, можно ли делать то, что я хочу, с проверенными списками или нет? если вы знаете кого-то, кто мог бы мне помочь, пожалуйста, скажите мне. Мне действительно нужно это сделать, потому что весь проект должен быть в эту пятницу. Спасибо.   -  person Yousi    schedule 25.07.2016
comment
Я думаю, это возможно. Я никого не знаю. Удачи!   -  person user3598756    schedule 25.07.2016
comment
@ user3598756 хорошо, спасибо за попытку помочь, пока есть надежда, что это возможно, еще раз спасибо.   -  person Yousi    schedule 25.07.2016


Ответы (2)


Прежде всего, ваши данные должны где-то храниться. Например, у вас может быть один рабочий лист для каждого шоу, сезоны в столбце A и эпизоды для каждого сезона в одной строке (начиная со столбца B). Если вы не хотите, чтобы эти данные были видны, просто скройте листы.

Итак, если я правильно понял, сначала вы хотите выбрать шоу, затем сезоны этого шоу появляются во втором списке, а затем, когда вы выбираете сезон, эпизоды этого сезона появляются в третьем списке.

Во-первых, вам нужно добавить все, что вы показываете, в 1-й список. Здесь я предполагаю, что у вас есть 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

Надеюсь, это поможет!

person Katia GG    schedule 25.07.2016
comment
код показывает все красные подчеркивания, и я использую проверенный список, код не работает. но спасибо за попытку помочь, если вы можете, пожалуйста, посмотрите на это изображение, попробуйте воспроизвести то, что у меня есть, и напишите код, который работает в программе, которую вы воспроизвели. вот мой макет с именами. dropbox.com/home?preview=Capture.PNG - person Yousi; 25.07.2016

Первое, что, я считаю, вам нужно сделать, это разместить многомерный массив для хранения вашей информации. Дополнительные сведения о зубчатых массивах: 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
person Zaid Al Shattle    schedule 26.07.2016
comment
привет, Зайд, спасибо за попытку помочь, но этот код не работает по какой-то причине, если хочешь, я могу дать тебе программу, и ты можешь протестировать правильный код в режиме реального времени, я пытался и искал везде, но я думаю, что ты близки к тому, что мне нужно. Вот программа, попробуйте ее на этом: dropbox.com/s /vavoey39bbgahqk/SHOWBOX.rar?dl=0 - person Yousi; 26.07.2016
comment
Я могу проверить это для вас сегодня вечером. Я сейчас немного занят. Но я обещаю вам проверить это сегодня вечером! - person Zaid Al Shattle; 26.07.2016
comment
Большое спасибо, Зайд, и если у тебя все получится, ты мой герой и легенда. еще раз спасибо. - person Yousi; 26.07.2016
comment
вы нашли решение для него? потому что мне это очень нужно. Спасибо. - person Yousi; 28.07.2016
comment
Не могли бы вы проверить это и попробовать код уже, мне это действительно нужно для моего школьного проекта. - person Yousi; 30.07.2016
comment
был очень занят в эти выходные. Увидим. Извиняюсь! - person Zaid Al Shattle; 31.07.2016
comment
Все в порядке, но, пожалуйста, не забывайте меня, это последний шаг, и тогда я закончу свой проект, большое спасибо за вашу помощь. - person Yousi; 31.07.2016
comment
Я просмотрел код, и в первую очередь есть 2 проблемы: 1- Если вы хотите загрузить проект, пожалуйста, загрузите полный файл проекта. В противном случае это немного усложняет задачу, и 2- я не могу найти, где должен располагаться ваш код добавления эпизода. Уточните, что и какие поля используются для указания сезона/названия эпизода/и т. д., чтобы я мог приступить к решению - person Zaid Al Shattle; 31.07.2016
comment
dropbox.com/s/c8bmc9684dd3bdc/Show%20Box% 201.0.rar?dl=0 полная программа находится по этой ссылке. Хорошо, позвольте мне уточнить. см. на этом рисунке [dropbox.com/s/u6xc3sb43ksq8qr/Capture. PNG?dl=0] я хочу иметь возможность назначать разные сезоны для каждого шоу, добавленного в lstShows, и разные эпизоды, добавленные в lstEpisodes, я хочу, чтобы пользователь мог добавлять их, используя предоставленные раскрывающиеся ящики, которые у см. выше lstEpisodes и lstSeasons. Итак, скажем, пользователь добавляет 3 телешоу, я хочу, чтобы у каждого телешоу были разные эпизоды и сезоны, назначенные ему пользователем. ты - person Yousi; 01.08.2016
comment
Попался. Дайте мне несколько часов, чтобы все проверить :) - person Zaid Al Shattle; 01.08.2016
comment
Таким образом, список эпизодов будет предварительно установлен, и пользователь будет выбирать из этого списка, чтобы добавить его. Я правильно понимаю? Таким образом, пользователь выбирает элемент из шоу в списке, который должен предоставить ему все эпизоды внутри этого шоу (предопределенные), и он будет выбирать из этих эпизодов. Если это оно (мне нужно подтверждение), то, вероятно, мы его получили :) - person Zaid Al Shattle; 01.08.2016
comment
Проверьте обновление к ответу. Скажи мне, если это работает! - person Zaid Al Shattle; 01.08.2016
comment
привет, Заид, когда я затемняю шоуЭпизоды вверху, это показывает мне ошибку, не могли бы вы попробовать это на файле проекта, который я вам отправил, и то, что вы сказали правильно, я хочу иметь возможность назначать сезоны для выбранного элемента в lstshows и эпизоды для выбранного элемента в lstSeasons, поэтому, когда я выбираю разные шоу и сезоны, определенные назначенные элементы будут отображаться в списках. Я очень ценю вашу помощь, поэтому, если вы можете, попробуйте код в реальном файле проекта. [dropbox.com/s/c8bmc9684dd3bdc/Show% 20Box%201.0.rar?dl=0] большое спасибо - person Yousi; 02.08.2016
comment
Смогли ли вы это сделать, потому что я на самом деле пробовал все, и у меня ничего не получилось, теперь я застрял только на этом. Пожалуйста, попробуй. - person Yousi; 05.08.2016