Home All Groups Group Topic Archive Search About

Problem with custom collections.

Author
21 Mar 2006 6:29 AM
Wade
Hi,

I have used the collectionbase to create two different collections.  One
various button clicks, I add values into these collections.  I'm having a
problem, though, for as soon as I add more than one item to the collection,
I am only able to retrieve the most recent item I've added.  For example,
when I debug, and look at the collectionbase list, I only see the "raw
value" for all my items, except for the most recently added item.

Any thoughts?

Note: I am running this on the Compact Framework 2.0 -- from what I've seen,
though, there shouldn't be anything different from the regular Framework
2.0.

Here is the code I'm using:

    public class PolygonPoints : CollectionBase
    {
        public PolygonPoints()
        {
        }

        public PolygonPoints(PolygonPoints coll)
        {
            this.InnerList.AddRange(coll);
        }

        public Point this[int index]
        {
            get
            {
                return ((Point)List[index]);
            }
            set
            {
                List[index] = value;
            }
        }
        public virtual void Add(Point item)
        {
            List.Add(item);
        }
        public virtual void Insert(int index, Point item)
        {
            List.Add(item);
        }
        public virtual void Remove(Point item)
        {
            List.Remove(item);
        }
        public bool Contains(Point item)
        {
            return List.Contains(item);
        }
        public int IndexOf(Point item)
        {
            return List.IndexOf(item);
        }
        public void CopyTo(Point[] array, int index)
        {
            List.CopyTo(array, index);
        }

        protected override void OnValidate(object value)
        {
            base.OnValidate(value);
            if (!(value is Point))
            {
                throw new ArgumentException("PolygonPoints only supports
Point objects.");
            }
        }

    }

    public class Polygons : CollectionBase
    {
        public Polygons()
        {
        }

        public Polygons(Polygons coll)
        {
            this.InnerList.AddRange(coll);
        }

        public PolygonPoints this[int index]
        {
            get
            {
                return ((PolygonPoints)List[index]);
            }
            set
            {
                List[index] = value;
            }
        }
        public virtual void Add(PolygonPoints item)
        {
            List.Add(item);
        }
        public virtual void Insert(int index, PolygonPoints item)
        {
            List.Add(item);
        }
        public virtual void Remove(PolygonPoints item)
        {
            List.Remove(item);
        }
        public bool Contains(PolygonPoints item)
        {
            return List.Contains(item);
        }
        public int IndexOf(PolygonPoints item)
        {
            return List.IndexOf(item);
        }
        public void CopyTo(PolygonPoints[] array, int index)
        {
            List.CopyTo(array, index);
        }

        protected override void OnValidate(object value)
        {
            base.OnValidate(value);
            if (!(value is PolygonPoints))
            {
                throw new ArgumentException("Polygons only supports
PolygonPoints objects.");
            }
        }
    }

Here is how I am adding data into my collections:

    PolygonPoints alCurrentPolygonPoints = new PolygonPoints();
    Point arrayPt = new Point(1,1);
    alCurrentPolygonPoints.Add(arrayPt);

And:

    Polygons htPolygons = new Polygons();
    htPolygons.Add(alCurrentPolygonPoints);

Author
21 Mar 2006 6:39 AM
Wade
I finally figured it out ...

As I added the PolygonPoints to my Polygons, I wasn't creating a new
instance.  I should have done something like this:

                    PolygonPoints tmp = new PolygonPoints(alPolygonPoints);
                    htPolygons.Add(tmp);

Ugh!

Show quote
"Wade" <wwegner23NOEMAILhotmail.com> wrote in message
news:%23nqm$CLTGHA.5900@tk2msftngp13.phx.gbl...
> Hi,
>
> I have used the collectionbase to create two different collections.  One
> various button clicks, I add values into these collections.  I'm having a
> problem, though, for as soon as I add more than one item to the
> collection, I am only able to retrieve the most recent item I've added.
> For example, when I debug, and look at the collectionbase list, I only see
> the "raw value" for all my items, except for the most recently added item.
>
> Any thoughts?
>
> Note: I am running this on the Compact Framework 2.0 -- from what I've
> seen, though, there shouldn't be anything different from the regular
> Framework 2.0.
>
> Here is the code I'm using:
>
>    public class PolygonPoints : CollectionBase
>    {
>        public PolygonPoints()
>        {
>        }
>
>        public PolygonPoints(PolygonPoints coll)
>        {
>            this.InnerList.AddRange(coll);
>        }
>
>        public Point this[int index]
>        {
>            get
>            {
>                return ((Point)List[index]);
>            }
>            set
>            {
>                List[index] = value;
>            }
>        }
>        public virtual void Add(Point item)
>        {
>            List.Add(item);
>        }
>        public virtual void Insert(int index, Point item)
>        {
>            List.Add(item);
>        }
>        public virtual void Remove(Point item)
>        {
>            List.Remove(item);
>        }
>        public bool Contains(Point item)
>        {
>            return List.Contains(item);
>        }
>        public int IndexOf(Point item)
>        {
>            return List.IndexOf(item);
>        }
>        public void CopyTo(Point[] array, int index)
>        {
>            List.CopyTo(array, index);
>        }
>
>        protected override void OnValidate(object value)
>        {
>            base.OnValidate(value);
>            if (!(value is Point))
>            {
>                throw new ArgumentException("PolygonPoints only supports
> Point objects.");
>            }
>        }
>
>    }
>
>    public class Polygons : CollectionBase
>    {
>        public Polygons()
>        {
>        }
>
>        public Polygons(Polygons coll)
>        {
>            this.InnerList.AddRange(coll);
>        }
>
>        public PolygonPoints this[int index]
>        {
>            get
>            {
>                return ((PolygonPoints)List[index]);
>            }
>            set
>            {
>                List[index] = value;
>            }
>        }
>        public virtual void Add(PolygonPoints item)
>        {
>            List.Add(item);
>        }
>        public virtual void Insert(int index, PolygonPoints item)
>        {
>            List.Add(item);
>        }
>        public virtual void Remove(PolygonPoints item)
>        {
>            List.Remove(item);
>        }
>        public bool Contains(PolygonPoints item)
>        {
>            return List.Contains(item);
>        }
>        public int IndexOf(PolygonPoints item)
>        {
>            return List.IndexOf(item);
>        }
>        public void CopyTo(PolygonPoints[] array, int index)
>        {
>            List.CopyTo(array, index);
>        }
>
>        protected override void OnValidate(object value)
>        {
>            base.OnValidate(value);
>            if (!(value is PolygonPoints))
>            {
>                throw new ArgumentException("Polygons only supports
> PolygonPoints objects.");
>            }
>        }
>    }
>
> Here is how I am adding data into my collections:
>
>    PolygonPoints alCurrentPolygonPoints = new PolygonPoints();
>    Point arrayPt = new Point(1,1);
>    alCurrentPolygonPoints.Add(arrayPt);
>
> And:
>
>    Polygons htPolygons = new Polygons();
>    htPolygons.Add(alCurrentPolygonPoints);
>

AddThis Social Bookmark Button