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; }
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; } }
protected virtual void OnDropOverItem(DragOverItemEventArgs e) { }
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; }
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); }
protected override void OnDragLeave(EventArgs e) { base.OnDragLeave(e); lastDragAndDropEffect = null; Invalidate(); }
protected override void OnDragDrop(DragEventArgs e) { base.OnDragDrop(e); if (lastDragAndDropEffect != null) OnDropOverItem(lastDragAndDropEffect); lastDragAndDropEffect = null; Invalidate(); }
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; } }