private void ThemeView_DragDrop(object sender, DragEventArgs e) { // find which theme item be draged ThemeItem currentItem = (ThemeItem)(e.Data.GetData(typeof(ThemeItem))); int selectedOrder = GetSelectedOrder(currentItem.ShapeName); // find mainform Control control = this; while (control.Parent != null) { control = control.Parent; } // 70 is toolStrip and menu's height int yOffset = (e.Y - control.Location.Y - 70) - currentItem.Location.Y; int remainder = yOffset % currentItem.Height; int divider = yOffset / currentItem.Height; int oneThirdHeight = currentItem.Height / 3; if (divider < 0 || (remainder > oneThirdHeight && divider > 0)) { DoDragDropItem(selectedOrder, selectedOrder - divider); return; } if (divider > 1 || (remainder < -oneThirdHeight && divider <= 0)) { DoDragDropItem(selectedOrder, selectedOrder - divider + 1); return; } }
private void SetupThemeItem(Layer layer) { ThemeItem themeItem = new ThemeItem(); themeItem.ShapeName = layer.Name; themeItem.ItemCheckedChanged += new EventHandler <ShapeEventArgs>(themeItem_ItemCheckedChanged); themeItem.ItemLinkClicked += new EventHandler <ShapeLinkClickedEventArgs>(themeItem_ItemLinkClicked); themeItem.ThemeItemClick += new EventHandler <LayerOrderEventArgs>(themeItem_ThemeItemClick); themeItem.ThemeItemRightClick += new EventHandler <RightClickEventArgs>(themeItem_ThemeItemRightClick); themeView.Items.Add(layer.Name, themeItem); }