protected override void SetItem(int index, EigoTestDrawingObject item)
 {
     if (!(item is WordCard)) throw new ArgumentException();
     base.SetItem(index, item);
     ((CardBox)_owner).WordCardの整列();
 }
 // Static members
 private static double CalcDistance(EigoTestDrawingObject a, EigoTestDrawingObject b)
 {
     var dx = a.BorderLeft - b.BorderLeft;
     var dy = a.BorderTop - b.BorderTop;
     return dx * dx + dy * dy;
 }
        public void 場所の入れ換え(EigoTestDrawingObject a, EigoTestDrawingObject b, TimeSpan idouJikan)
        {
            var aa = a.Copy();
            aa.IsClickable = false;
            aa.IsVisible = true;
            aa.Position = DrawingObjectPosition.Absolute;
            aa.Left = a.OuterLeft;
            aa.Top = a.OuterTop;

            var bb = b.Copy();
            bb.IsClickable = false;
            bb.IsVisible = true;
            bb.Position = DrawingObjectPosition.Absolute;
            bb.Left = b.OuterLeft;
            bb.Top = b.OuterTop;

            a.IsClickable = false;
            a.IsVisible = false;

            b.IsClickable = false;
            b.IsVisible = false;

            Items.Add(aa);
            Items.Add(bb);

            var startTime = NowObject.Now;
            var endTime = startTime + idouJikan;

            DrawingPreparers.Add(new DrawingPreparer(drawingPreparer =>
            {
                if (endTime <= NowObject.Now)
                {
                    Items.Remove(aa);
                    Items.Remove(bb);

                    aa.Location = b.Location;
                    aa.Position = b.Position;
                    aa.IsClickable = true;
                    aa.IsVisible = true;
                    bb.Location = a.Location;
                    bb.Position = a.Position;
                    bb.IsClickable = true;
                    bb.IsVisible = true;

                    var indexA = a.Parent.Items.IndexOf(a);
                    a.Parent.Items[indexA] = bb;
                    var indexB = b.Parent.Items.IndexOf(b);
                    b.Parent.Items[indexB] = aa;

                    drawingPreparer.HasBeenFinished = true;
                    return true;
                }
                float r = (NowObject.Now - startTime).Ticks / (float)(endTime - startTime).Ticks;
                aa.Left = a.OuterLeft + (b.OuterLeft - a.OuterLeft) * r;
                aa.Top = a.OuterTop + (b.OuterTop - a.OuterTop) * r;
                a.Width = a.Width + (b.Width - a.Width) * r;
                bb.Left = b.OuterLeft + (a.OuterLeft - b.OuterLeft) * r;
                bb.Top = b.OuterTop + (a.OuterTop - b.OuterTop) * r;
                b.Width = b.Width + (a.Width - b.Width) * r;
                return true;
            }));
        }
 public double CalcDistance(EigoTestDrawingObject x)
 {
     return CalcDistance(this, x);
 }
 public CurrentItemInfo(EigoTestDrawingObject item)
 {
     Item = item;
 }