protected override void OnMouseDown(MouseEventArgs e) { base.OnMouseDown(e); OnMouseMove(e); if (HoverTabIdx != -1) { if (e.Button == MouseButtons.Left) { if (HoverTabIdx == SelectedTabIdx) { if (e.Location.X > Tabs[HoverTabIdx].MinX + Tabs[HoverTabIdx].Width - Tabs[HoverTabIdx].CloseButtonWidth) { RemoveTab(HoverTabIdx); } else { DragState = new TabDragData { Tab = Tabs[SelectedTabIdx], InitialIdx = SelectedTabIdx, MouseX = e.Location.X, RelativeMouseX = e.Location.X - Tabs[SelectedTabIdx].MinX }; } } else { if (HoverTabIdx > Tabs.Count - 1) { OnButtonClick(HoverTabIdx - Tabs.Count, e.Location, e.Button); } else if (HoverTabIdx == Tabs.Count - 1) { OnNewTabClick(e.Location, e.Button); } else { SelectTab(HoverTabIdx); } } } else if (e.Button == MouseButtons.Middle) { if (HoverTabIdx < Tabs.Count - 1) { RemoveTab(HoverTabIdx); } } } if (OnTabClicked != null) { object TabData = (HoverTabIdx == -1)? null : Tabs[HoverTabIdx].Data; OnTabClicked(TabData, e.Location, e.Button); } }
protected override void OnMouseUp(MouseEventArgs e) { base.OnMouseUp(e); if (DragState != null) { if (OnTabReorder != null) { OnTabReorder(); } DragState = null; LayoutTabs(); Invalidate(); } }