private void fl_DropOverItem(object sender, DragOverItemEventArgs e)
        {
            var text = (e.Data.GetData(typeof(Label)) as Label).Text;

            switch (e.InsertEffect)
            {
                case InsertEffect.InsertBefore:
                    list.Insert(e.ItemIndex, text);
                    fl.ItemCount = list.Count;
                    break;

                case InsertEffect.InsertAfter:
                    list.Insert(e.ItemIndex + 1, text);
                    fl.ItemCount = list.Count;
                    break;

                case InsertEffect.Replace:
                    if (MessageBox.Show("Are you sure to replace item?", "Replace", MessageBoxButtons.OKCancel) == DialogResult.OK)
                    {
                        list[e.ItemIndex] = text;
                        fl.Invalidate();
                    }
                    break;
            }
        }
        private void fl_DragOverItem(object sender, DragOverItemEventArgs e)
        {
            var lb = e.Data.GetData(typeof (Label)) as Label;

            if (lb == lbRegular)
            {
                e.Effect = e.AllowedEffect;
                return;
            }

            if (lb == lbAfter13 && list[e.ItemIndex] == "Item 13")
            {
                e.Effect = e.AllowedEffect;
                e.InsertEffect = InsertEffect.InsertAfter;
                return;
            }

            if (lb == lbEndOfList)
            {
                e.Effect = e.AllowedEffect;
                e.InsertEffect = InsertEffect.InsertAfter;
                e.ItemIndex = list.Count - 1;
                return;
            }

            if (lb == lbReplace)
            {
                e.Effect = DragDropEffects.Move;
                e.InsertEffect = InsertEffect.Replace;
                return;
            }

            e.Effect = DragDropEffects.None;
        }
Example #3
0
        protected virtual void DrawDragOverInsertEffect(Graphics gr, DragOverItemEventArgs e)
        {
            var c1 = Color.FromArgb(SelectionColor.A == 255 ? SelectionColorOpaque : SelectionColor.A, SelectionColor);
            var c2 = Color.Transparent;

            if (!visibleItemInfos.ContainsKey(e.ItemIndex))
                return;
            var info = visibleItemInfos[e.ItemIndex];
            var rect = new Rectangle(info.X_ExpandBox, info.Y, 1000, info.Height);

            switch (e.InsertEffect)
            {
                case InsertEffect.Replace:
                    using (var brush = new SolidBrush(c1))
                        gr.FillRectangle(brush, rect);
                    break;

                case InsertEffect.InsertBefore:
                    if (e.ItemIndex <= 0)
                        rect.Offset(0, 2);
                    using (var pen = new Pen(c1, 2) { DashStyle = DashStyle.Dash })
                        gr.DrawLine(pen, rect.Left, rect.Top, rect.Right, rect.Top);
                    break;

                case InsertEffect.InsertAfter:
                    if (e.ItemIndex < 0)
                        rect.Offset(0, 2);
                    using (var pen = new Pen(c1, 2) { DashStyle = DashStyle.Dash })
                        gr.DrawLine(pen, rect.Left, rect.Bottom, rect.Right, rect.Bottom);
                    break;

                case InsertEffect.AddAsChild:
                    if (e.ItemIndex >= 0 && e.ItemIndex < ItemCount)
                    {
                        var dx = GetItemIndent(e.ItemIndex) + 80;
                        rect.Offset(dx, 0);
                        using (var pen = new Pen(c1, 2) { DashStyle = DashStyle.Dash })
                            gr.DrawLine(pen, rect.Left, rect.Bottom, rect.Right, rect.Bottom);
                    }
                    break;
            }
        }
Example #4
0
 protected virtual void OnDropOverItem(DragOverItemEventArgs e)
 {
 }
Example #5
0
 protected virtual void OnDragOverItem(DragOverItemEventArgs e)
 {
     if (e.Y < e.ItemRect.Y + e.ItemRect.Height / 2)
         e.InsertEffect = InsertEffect.InsertBefore;
     else
         e.InsertEffect = InsertEffect.InsertAfter;
 }
Example #6
0
        protected override void OnDragOver(DragEventArgs e)
        {
            var p = new Point(e.X, e.Y);
            p = PointToClient(p);

            var itemIndex = YToIndexAround(p.Y + VerticalScroll.Value);
            var rect = CalcItemRect(itemIndex);

            var textRect = rect;
            if (visibleItemInfos.ContainsKey(itemIndex))
            {
                var info = visibleItemInfos[itemIndex];
                textRect = new Rectangle(info.X_Text, rect.Y, info.X_EndText - info.X_Text + 1, rect.Height);
            }

            var ea = new DragOverItemEventArgs(e.Data, e.KeyState, p.X, p.Y, e.AllowedEffect, e.Effect, rect, textRect) { ItemIndex = itemIndex };

            OnDragOverItem(ea);

            if (ea.Effect != DragDropEffects.None)
                lastDragAndDropEffect = ea;
            else
                lastDragAndDropEffect = null;

            e.Effect = ea.Effect;

            //scroll
            if (ea.ItemIndex >= 0 && ea.ItemIndex < ItemCount && itemIndex != ea.ItemIndex)
            {
                rect = CalcItemRect(ea.ItemIndex);
                rect.Inflate(0, 2);
                rect.Offset(HorizontalScroll.Value, VerticalScroll.Value);
                ScrollToRectangle(rect);
            }
            else
            {
                if (p.Y <= Padding.Top + ItemHeightDefault / 2)
                    ScrollUp();
                else if (p.Y >= ClientSize.Height - Padding.Bottom - +ItemHeightDefault / 2)
                    ScrollDown();
            }

            Invalidate();

            //base.OnDragOver(e);
        }
Example #7
0
 protected override void OnDragLeave(EventArgs e)
 {
     base.OnDragLeave(e);
     lastDragAndDropEffect = null;
     Invalidate();
 }
Example #8
0
        protected override void OnDragDrop(DragEventArgs e)
        {
            base.OnDragDrop(e);

            if (lastDragAndDropEffect != null)
                OnDropOverItem(lastDragAndDropEffect);

            lastDragAndDropEffect = null;
            Invalidate();
        }
Example #9
0
        protected virtual void DrawDragOverInsertEffect(Graphics gr, DragOverItemEventArgs e)
        {
            var c1 = Color.FromArgb(SelectionColor.A == 255 ? SelectionColorOpaque : SelectionColor.A, SelectionColor);
            var c2 = Color.Transparent;

            var rect = CalcItemRect(e.ItemIndex);

            switch(e.InsertEffect)
            {
                case InsertEffect.Replace:
                    using (var brush = new SolidBrush(c1))
                        gr.FillRectangle(brush, rect);
                    break;

                case InsertEffect.InsertBefore:
                    if (e.ItemIndex <= 0)
                        rect.Offset(0, 2);
                    using (var pen = new Pen(c1, 2) { DashStyle = DashStyle.Dash })
                        gr.DrawLine(pen, rect.Left, rect.Top, rect.Right, rect.Top);
                    break;

                case InsertEffect.InsertAfter:
                    if (e.ItemIndex < 0)
                        rect.Offset(0, 2);
                    using (var pen = new Pen(c1, 2) { DashStyle = DashStyle.Dash })
                        gr.DrawLine(pen , rect.Left, rect.Bottom, rect.Right, rect.Bottom);
                    break;

                case InsertEffect.AddAsChild:
                    if (e.ItemIndex >= 0 && e.ItemIndex < ItemCount)
                    {
                        var dx = GetItemIndent(e.ItemIndex) + 16;
                        rect.Offset(dx, 0);
                        using (var pen = new Pen(c1, 2) {DashStyle = DashStyle.Dash})
                            gr.DrawLine(pen, rect.Left, rect.Bottom, rect.Right, rect.Bottom);
                    }
                    break;
            }
        }