Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2013, 15:45   #1
updaite
Пользователь
 
Регистрация: 11.01.2013
Сообщений: 40
По умолчанию TabControl и listview запутался.

Привет есть плагины.
Со следующими индификаторами
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 плагина для теста.
Изображения
Тип файла: jpg Снимок.JPG (24.7 Кб, 55 просмотров)
Тип файла: jpg Снимок1.JPG (28.4 Кб, 53 просмотров)
Вложения
Тип файла: rar WindowsFormsApplication1.rar (89.3 Кб, 7 просмотров)

Последний раз редактировалось updaite; 02.11.2013 в 15:49.
updaite вне форума Ответить с цитированием
Старый 02.11.2013, 16:53   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
if (tabControl1.TabPages.Cast<TabPage> ().ToArray().Length == 0) // Проверяем если нету вкладки создаем
это что за бред?
eval вне форума Ответить с цитированием
Старый 02.11.2013, 17:23   #3
updaite
Пользователь
 
Регистрация: 11.01.2013
Сообщений: 40
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
это что за бред?
Проверка количества вкладок, код сырой, не оптимизировал еще, для выполнения условия этого выражения вполне достаточно.

Последний раз редактировалось updaite; 02.11.2013 в 17:26.
updaite вне форума Ответить с цитированием
Старый 02.11.2013, 17:36   #4
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

просто tabControl1.TabPages.Count не получается?
и у вас вся логика такаяже, кривая
eval вне форума Ответить с цитированием
Старый 02.11.2013, 17:40   #5
updaite
Пользователь
 
Регистрация: 11.01.2013
Сообщений: 40
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
просто tabControl1.TabPages.Count не получается?
и у вас вся логика такаяже, кривая
Можно и так, вопрос не в этом состоит.
updaite вне форума Ответить с цитированием
Старый 02.11.2013, 17:47   #6
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

тут нет вопросов, тут просто все выкинуть и написать правильно, без этих ифов форов и инкрементов
eval вне форума Ответить с цитированием
Старый 02.11.2013, 17:50   #7
updaite
Пользователь
 
Регистрация: 11.01.2013
Сообщений: 40
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
тут нет вопросов, тут просто все выкинуть и написать правильно, без этих ифов форов и инкрементов
Вам виднее, покажите свой вариант решения. Только учтите тот факт, плагинов может быть n количество.

Последний раз редактировалось updaite; 02.11.2013 в 17:54.
updaite вне форума Ответить с цитированием
Старый 02.11.2013, 22:51   #8
updaite
Пользователь
 
Регистрация: 11.01.2013
Сообщений: 40
По умолчанию

Актуально.
updaite вне форума Ответить с цитированием
Старый 02.11.2013, 23:07   #9
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

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

Последний раз редактировалось eval; 02.11.2013 в 23:09.
eval вне форума Ответить с цитированием
Старый 03.11.2013, 14:17   #10
updaite
Пользователь
 
Регистрация: 11.01.2013
Сообщений: 40
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
да хоть эн плюс эм..
по первое - я уже спрашивал про тот первый иф, который бред, выбросьте его, он тут ни к селу, вы должны сразу проверять есть ли в табпейджах нужный
TabControl изначально пустой, без вкладок, без этого иф дальнейшее условие не выполняется.
updaite вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перетащить элемент ListView в другой ListView? Paul Hindenburg Компоненты Delphi 5 26.01.2013 11:35
TabControl evgenrpo Общие вопросы .NET 3 12.07.2011 01:34
TabControl vipbobik C++ Builder 0 20.05.2011 17:36
[C# + WPF] ListView. Узнать выделена ли строка в нём. ListView.View == GridView. Casper-SC WPF, UWP, WinRT, XAML 2 12.08.2010 19:04