private void ClearTimer() { if (_hoverTimer != null) { _hoverTimer.Dispose(); _hoverTimer = null; } }
private void HoverExpand(object sender, EventArgs args) { HoverTimer timer = (HoverTimer)sender; if (timer.Node != null) { timer.Node.Expand(); } timer.Enabled = false; }
protected override void OnDragOver(DragEventArgs args) { base.OnDragOver(args); HoverAction newAction; TreeNode newNode = null; Point localPoint = PointToClient(new Point(args.X, args.Y)); if (localPoint.Y < HoverScrollMargin) { newAction = HoverAction.ScrollUp; } else if (localPoint.Y > (ClientSize.Height - HoverScrollMargin)) { newAction = HoverAction.ScrollDown; } else { newAction = HoverAction.OverNode; newNode = GetNodeAt(localPoint.X, localPoint.Y); } if (_hoverTimer != null) { if ((_hoverTimer.Action != newAction) || (_hoverTimer.Node != newNode)) { ClearTimer(); } else { return; // do not reset the timer if nothing has changed } } if ((newAction != HoverAction.OverNode) || (newNode != null)) { _hoverTimer = new HoverTimer(newAction, newNode); switch (newAction) { case HoverAction.OverNode: _hoverTimer.Interval = DragOverInterval; _hoverTimer.Tick += new EventHandler(HoverExpand); break; case HoverAction.ScrollUp: case HoverAction.ScrollDown: _hoverTimer.Interval = HoverScrollInterval; _hoverTimer.Tick += new EventHandler(HoverScroll); break; } _hoverTimer.Enabled = true; } }
private void HoverScroll(object sender, EventArgs args) { HoverTimer timer = (HoverTimer)sender; if (timer.Action == HoverAction.ScrollUp) { ScrollTree(-2); } else { ScrollTree(2); } }