Błąd Collection is read only.

0

Witam tworzę aplikację która na podstawie bazy mssql rysuje formatkę. Mam listę private List<Component> componentList; w klasię nadrzędnej zawartość klasy Component wygląda z grubsza tak:

 class Component : IDisposable
    {
        private TypeComponents enumComponent;
        private int idComponent;
        private int idComponentParent = 0;
        private int idPosition;
        private int baseTypeComponent;
       private Object windowsComponent;
        private List<PropertiesComponent> propertiesList;

        public TypeComponents EnumComponent { get { return enumComponent; } set { enumComponent = value; } }
        public int IdComponent { get { return idComponent; } set { idComponent = value; } }
        public int IdComponentParent { get { return idComponentParent; } set { idComponentParent = value; } }
        public int IdPosition { get { return idPosition; } set { idPosition = value; } }
        public int MyProperty { get; set; }
        public Object WindowsComponent { get { return windowsComponent; } set { windowsComponent = value; } }
        public List<PropertiesComponent> PropertiesList { get { return propertiesList; } set { propertiesList = value; } }
     } 

Pole widnowsComponent ma przechowywać kontrolki microsoftowe oraz devexpresowe.

Następnie dodaję kontrolki w ten sposób:

 windowsComponent = new Button() 

oraz odwołuję się do nich w klasie wyżej w następujący spsób:

 if( componentList.elementAt(0).windowsComponent is Component)
                      {
                             Component tmp = componentList.elementAt(0).windowsComponent as Component
                             if( componentList.elementAt(1).windowsComponent is Component)
                            {
                                 Component tmp2 = componentList.elementAt(1).windowsComponent as Component
                                 tmp.controls.add(tmp2) <  -- tutaj dostaję błąd że kolekcja jest tylko do odczytu
                             }
                    }

Sorki za trochę nieczytelny kod ale nie chciałem wrzucać całego kodu bo trochę go jest. Ma ktoś może pomysł z czym to może być związane? Z góry dziękuje za wszelką pomoc.

0

Ten kod przepisywałeś ręcznie? Lepiej wklej to co masz w projekcie, bo to co tutaj zaprezentowałeś nie ma prawa działać. Brakuje średników, korzystasz z "elementAt", tworzysz "Component tmp" a później odwołujesz się do "tmp.controls" którego nigdzie nie ma itd. Nie wiem dlaczego korzystasz z ElementAt skoro List<T> : IList, czyli ma indexery i możesz napisać compomentList[0]... tak właśnie działa ElementAt dla IList. Tak ponadto dlaczego "windowsCompoment" jest typu "Object", nie jest to zbyt ogólne?

0

Problem rozwiązany zamieniłem pętle foreach na for w zewnętrznej klasie.

Zenek1999 napisał(a):

Brakuje średników, korzystasz z "elementAt", tworzysz "Component tmp" a później odwołujesz się do "tmp.controls" którego nigdzie nie ma itd. Tak ponadto dlaczego "windowsCompoment" jest typu "Object", nie jest to zbyt ogólne?

Fakt źle napisałem ten kod tutaj bo rzutuję na Control a nie Component. Dzięki za podpowiedź o możliwości odwoływania się do listy po [] bo zapomniałem o tym. Dzięki bardzo za zainteresowanie się tematem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1