Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > TabControl и listview в циклах


Автор: updaite 2.11.2013, 15:18
Привет есть плагины.
Со следующими индификаторами
1)Плагин:
public string PluginName { get { return "NamePlagin 1"; } }
public string PlugunCategory { get { return "Test_1"; } }
2)Плагин:
public string PluginName { get { return "NamePlagin 2"; } }
public string PlugunCategory { get { return "Test_1"; } }
3)Плагин:
public string PluginName { get { return "NamePlagin 3"; } }
public string PlugunCategory { get { return "Test_2"; } }
4)Плагин:
public string PluginName { get { return "NamePlagin 4"; } }
public string PlugunCategory { get { return "Test_2"; } }

Поле PlugunCategory категория PluginName имя.
Нужно проверить это все в циклах и сгруппировать на tabControl и liistview должно получиться как на картинке. (рис, 1)

Код реализации 
Код

int Incriment = 1;
            DirectoryCatalog m_catalog = new DirectoryCatalog("Plugin");
            CompositionContainer container = new CompositionContainer(m_catalog);
            container.ComposeParts(this);
            if (Plugins == null) return;
      
           foreach (var plugin in Plugins) // Цикл перебора плагинов 
                  {
                     if (tabControl1.TabPages.Cast<TabPage>().ToArray().Length == 0) // Проверяем если нету вкладки создаем
                      {
                          ListView Box = new ListView();
                          tabControl1.TabPages.Add(plugin.PlugunCategory);
                          Box.Parent = tabControl1.TabPages[0];
                          Box.Name = plugin.PlugunCategory;
                          Box.Top = 111;
                          Box.Show();
                          Box.Items.Add(plugin.PluginName);
                      }
                      else
                        {
                          for (int i = 0; i < tabControl1.TabPages.Count; i++) // Проверяем количество вкладок
                            {
                              for (int j = 0; j < tabControl1.TabPages[i].Controls.Count; j++)
                              {
                                  ListView lv = (ListView)tabControl1.TabPages[i].Controls[j];

                               /*Проверяем имя ListView если оно равно имени
                              индификатора то добавляем PluginName в него*/
                                  if (lv.Name == plugin.PlugunCategory) 
                                  {  
                                      lv.Items.Add(plugin.PluginName); // добавляем итем
                                  }
                 else
                {
                                      ListView Box = new ListView();
                                      tabControl1.TabPages.Add(plugin.PlugunCategory);
                                      Box.Parent = tabControl1.TabPages[Incriment];
                                      Box.Name = plugin.PlugunCategory;
                                      Box.Top = 111;
                                      Box.Show();
                      Box.Items.Add(plugin.PluginName);
                                      Incriment++;
                                   }
                                }    
                            }
                         }
                     }


Работает почти правильно, но создает лишние вкладки и добавляет лишние итемы в listview (рис, 2) мучаюсь уже долго не могу разобраться помогите.
Прикладываю проект на vs 2012 в нем сам проект и 4 плагина для теста.
user posted image
 user posted image

Автор: updaite 3.11.2013, 13:18
Аутуально

Автор: updaite 4.11.2013, 19:24
Ап

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)