protected virtual void OnDragStart(DragStartEventArgs e) { if (_closeButtonState != CloseButtonState.None) { _closeButtonState = CloseButtonState.None; Invalidate(_currentCloseButtonBounds); } _currentCloseButtonBounds = Rectangle.Empty; var handler = DragStart; if (handler != null) { DragStart(this, e); } }
protected override void OnMouseMove(MouseEventArgs e) { base.OnMouseMove(e); if ( _dragStartRect != Rectangle.Empty && !_dragStartRect.Contains(e.X, e.Y) ) { var tabPage = GetTabPage(_dragStartPoint); if (tabPage != null) { var dse = new DragStartEventArgs(); OnDragStart(dse); var dataObj = new DataObject(); if (dse.DragDataObjects != null) { foreach (var obj in dse.DragDataObjects) { dataObj.SetData(obj); } } dataObj.SetData(tabPage); DoDragDrop(dataObj, DragDropEffects.Move | dse.AllowedEffect); } } else { if (_closeButtonState != CloseButtonState.Pressed) { var tabPage = GetTabPage(e.Location); if (tabPage != null) { var r = GetCloseButtonBounds(tabPage); var oldCloseButtonBounds = _currentCloseButtonBounds; if (r.Contains(e.Location)) { _closeButtonState = CloseButtonState.Hovered; } else { _closeButtonState = CloseButtonState.Normal; } if (r != oldCloseButtonBounds) { Invalidate(oldCloseButtonBounds); Invalidate(r); } _currentCloseButtonBounds = r; } else { _currentCloseButtonBounds = Rectangle.Empty; } } else { _currentCloseButtonBounds = Rectangle.Empty; } } }