canvas四个可托动的方快,读取他们的顺序顺序必须是从左到右,从上到下     ■  ■
      ■    ■
四个方快是不对齐的并且这个四个方快是可以托动变换位置的,想过用坐标排序来获取但失败。追加一个问题  将canvas比做是一个页面 canvas里有四个方快,每个方块的信息有x坐标,y坐标,等其它信息    现在我是将方快定义为一个类型  将页面定义为泛型集合  如
list<方快类型> 页面= new list<方快类型>     方快类型 方快= new 方快类型      方快.x=21
      方快.y=60
页面.add(方快);
  现在问题是当我新一增一页,我怎样来确定那些方快是那页的呢?按我的想法集合是页面的我上面写的就有问题因为我上页是增加一个方快类型就增加了一个集合
   我想应该是一个集合代表一个页面,一个集合下面有几个方快对象我是不是可以这样做呢
页面[0].add(方快1)
页面[0].add(方快2)
页面[0].add(方快3)

解决方案 »

  1.   

    1.给方块类实现IComparable<T>接口,之后就可以用Sort之类的扩展方法直接排序了2.给方块类添加一个Parent属性。然后为了方便,可以重写页面类的添加删除等一系列方法,在这些方法中更改操作对象的Parent属性。大概就像这个样子
    List<T>操作元素的函数很多,这里只举了两个例子
    还有就是List<T>的函数都不是虚函数,最好从Collection<T>派生public class Block : IComparable<Block>
    {
    public int X { get; set; }
    public int Y { get; set; }
    public Page Parent { get; set; }
    public int CompareTo(Block other)
    {
    return X != other.X ? X - other.X : Y - other.Y;
    }
    }public class Page : List<Block>
    {
    public new void Add(Block item)
    {
    item.Parent = this;
    base.Add(item);
    }
    public new void Remove(Block item)
    {
    item.Parent = null;
    base.Remove(item);
    }
    }
      

  2.   

    你就不能自己改一下CompareTo的实现吗
     return X != other.X ? X - other.X : Y - other.Y;
    这里的X改成Y,Y改成X就是你的那个意思了