2008-10-27 5 views
2

Я создал класс для элемента панели инструментов, который будет содержать информацию, такую ​​как размещение на панели управления, описание и т. Д. В настоящее время я использую пару Коллекций для хранения этих элементов панели управления, содержащихся в «библиотеке» и те элементы, которые отображаются на самой панели. Меня попросили сделать эту вкладку с несколькими вкладками, и моя первая наклонность состояла в том, чтобы создать новую коллекцию для каждой вкладки. Для этого мне нужен какой-то тип массива или коллекции, который мог бы добавить к ним многие из этих наборов элементов панели инструментов, поскольку в панель инструментов добавлено больше вкладок.Возможно ли собрание коллекций и/или лучший способ? C# .Net 3.5

Возможно ли это, и если да, могу ли я получить небольшой фрагмент кода для объявления такой коллекции? Я рассмотрел использование одной коллекции с переменной, чтобы показать, на какой вкладке будет отображаться элемент ... Однако отображение и процедуры управления перемещением элементов панели инструментов между экраном и библиотекой в ​​настоящее время нуждаются в этих отдельных коллекциях.

Редактировать: Спасибо за ваши ответы. В то время как я нахожу их интересными, я считаю, что я собираюсь пойти с решением Джеймса и буду отмечать его как принятый ответ.

ответ

8
List< List<Placement>> ListofListOfPlacements = new List< List<Placement>>(); 

List<Placement> dashboard1 = new List<Placement>(); 
List<Placement> dashboard2 = new List<Placement>(); 
List<Placement> dashboard3 = new List<Placement>(); 
List<Placement> dashboard4 = new List<Placement>(); 

ListofListOfPlacements.Add(dashboard1); 
ListofListOfPlacements.Add(dashboard2); 
ListofListOfPlacements.Add(dashboard3); 
ListofListOfPlacements.Add(dashboard4); 
1

Почему бы не создать класс, содержащий вторую коллекцию и любую предыдущую информацию, и просто иметь коллекцию этих элементов?

+0

Согласен.В какой-то момент вам, вероятно, понадобится больше информации для каждой вкладки, а не того, что на ней есть. – Kibbee 2008-10-27 14:24:08

1

Почему бы не разместить свою коллекцию элементов панели приборов в классе табуляции?

так:

public class DashboardTabPage : TabPage 
{ 
    public List<DashboardItem> DashboardItems { get; set; } 

    public DashboardTabPage() : this (new List<DashboardItem>()) 
    { 

    } 

    public DashboardTabPage(List<DashboardItem> items) :base ("Dashboard Thing") 
    { 
     DashboardItems = items; 
    } 

} 

общественного класса DashboardItem {}

, то вы можете сделать это:

c.TabPages.Add(new DashboardTabPage()); 
1

Поскольку вы говорите о закладках, это звучит для меня, как вы хотите что-то ближе к словарю, указанному в названии вкладки, с набором элементов для каждой вкладки. .NET 3.5 добавлен интерфейс ILookup<,>:

 ILookup<string, Foo> items = null; //TODO 
     foreach (Foo foo in items["SomeTab"]) 
     { 
      Console.WriteLine(foo.Bar); 
     } 

Следует отметить, что реализация MS является неизменной - вы не можете изменить его после создания; Однако, я написал EditableLookup<,> в MiscUtil, что позволяет более эффективно работать (так же, как обычные коллекции .NET):

 var items = new EditableLookup<string, Foo>(); 
     items.Add("SomeTab", new Foo { Bar = "abc" }); 
     items.Add("AnotherTab", new Foo { Bar = "def" }); 
     items.Add("SomeTab", new Foo { Bar = "ghi" }); 
     foreach (Foo foo in items["SomeTab"]) 
     { // prints "abc" and "ghi" 
      Console.WriteLine(foo.Bar); 
     } 

Без EditableLookup<,>, вам нужно построить поиск с помощью метода Enumerable.ToLookup расширения.

Если какая-либо часть это звучит как вариант, я могу добавить больше деталей ...

0

Я думаю, вы должны пойти с составом, как показано ниже

Per пользователя Dashboard-дома (наличие нескольких вкладок) объект, содержащий список объектов панели мониторинга, содержащий список объектов объектов панели мониторинга, имеющих различные операции над ними. Опять элемент панели инструментов может быть usercontrol, определяющим все возможные события, которые обрабатываются либо там, в объекте элемента панели управления, и/или слева для объекта пользовательского интерфейса панели управления, который будет работать с отдельными объектами панели мониторинга.

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

 Смежные вопросы

  • Нет связанных вопросов^_^