protected override void OnMouseMove(MouseEventArgs e) { //如果鼠标的左键没有按下,重置HistTest if (e.Button != MouseButtons.Left) { _histTest = HistTest.None; } Rectangle collapseRect = CollapseRect; Point mousePoint = e.Location; //鼠标在Button矩形里,并且不是在拖动 if (collapseRect.Contains(mousePoint) && _histTest != HistTest.Spliter) { base.Capture = false; SetCursor(Cursors.Hand); MouseState = SplitContainer.ControlPaintEx.ControlState.Hover; return; }//鼠标在分隔栏矩形里 if (base.SplitterRectangle.Contains(mousePoint)) { MouseState = SplitContainer.ControlPaintEx.ControlState.Normal; //如果已经在按钮按下了鼠标或者已经收缩,就不允许拖动了 if (_histTest == HistTest.Button || (_collapsePanel != CollapsePanel.None && _spliterPanelState == SpliterPanelState.Collapsed)) { base.Capture = false; base.Cursor = Cursors.Default; return; } //鼠标没有按下,设置Split光标 if (_histTest == HistTest.None && !base.IsSplitterFixed) { SetCursor(base.Orientation == Orientation.Horizontal ? Cursors.HSplit : Cursors.VSplit); return; } } MouseState = SplitContainer.ControlPaintEx.ControlState.Normal; //正在拖动分隔栏 if (_histTest == HistTest.Spliter && !base.IsSplitterFixed) { SetCursor(base.Orientation == Orientation.Horizontal ? Cursors.HSplit : Cursors.VSplit); base.OnMouseMove(e); return; } base.Cursor = Cursors.Default; base.OnMouseMove(e); }
protected override void OnMouseLeave(EventArgs e) { base.Cursor = Cursors.Default; MouseState = SplitContainer.ControlPaintEx.ControlState.Normal; base.OnMouseLeave(e); }