Ejemplo n.º 1
0
        private void DraggingMonitorLoop()
        {
            const int scrollMargin  = 8;
            TreeNode  lastOver      = null;
            int       overItemCount = 0;

            while (!abortThreads)
            {
                if (isDragging && dragginOverNode != null)
                {
                    try {
                        if (draggingLocation.Y <= scrollMargin)
                        {
                            TreeViewItems.ScrollUp();
                        }
                        else if (draggingLocation.Y >= TreeViewItems.Height - scrollMargin)
                        {
                            TreeViewItems.ScrollDown();
                        }
                        else if (lastOver != dragginOverNode)
                        {
                            this.Invoke((MethodInvoker) delegate {
                                if (dragginOverNode.Nodes.Count > 0 && !dragginOverNode.IsExpanded)
                                {
                                    lastOver      = dragginOverNode;
                                    overItemCount = 0;
                                }
                                else
                                {
                                    lastOver = null;
                                }
                            });
                        }
                        else if (lastOver == dragginOverNode && lastOver != null && ++overItemCount >= 10)
                        {
                            this.Invoke((MethodInvoker) delegate {
                                dragginOverNode.Expand();
                                lastOver = null;
                            });
                        }
                    } catch { }
                }
                Thread.Sleep(100);
            }
        }