WEB开发网
开发学院软件开发C语言 C#使用双链表来实现模拟IE前进后退功能 阅读

C#使用双链表来实现模拟IE前进后退功能

 2009-04-20 08:26:19 来源:WEB开发网   
核心提示: HistoryAction是对链表操作静态类,具体看代码注释class HistoryAction { //活动节点对象,即当前的节点对象 private static LinkedListNode<History> HistoryCurrentNode= null; //全局

HistoryAction是对链表操作静态类,具体看代码注释

class HistoryAction
    {
        //活动节点对象,即当前的节点对象
        private static LinkedListNode<History> HistoryCurrentNode= null;
        //全局的链表对象,所以记录均保存到该对象中
        private static LinkedList<History> HistoryList = new LinkedList<History>();
        //设置保存最大条数,当达到该条数时,每次增加记录时,均依次删除原有记录
        private static int MaxList = 10;
        /**//// <summary>
        /// 或取当前的记录信息
        /// </summary>
        public static History CurrentHistory
        {
            get { return (History)HistoryCurrentNode.Value; }
        }
        /**//// <summary>
        /// 当前后退时否可用,用于设置按钮状态信息
        /// </summary>
        public static bool IsBack
        {
            get
            {
                return HistoryCurrentNode.Next == null ? false : true;
            }
        }
        /**//// <summary>
        /// 当前前进时否可用,用于设置按钮状态信息
        /// </summary>
        public static bool IsGo
        {
            get
            {
                return HistoryCurrentNode.Previous == null ? false : true;
            }
        }
        /**//// <summary>
        /// 向历史记录链表中加入新的节点
        /// </summary>
        /// <param name="h"></param>
        public static void Add(History h)
        {
            LinkedListNode<History> tem = HistoryList.First;
            //如果连续加入url相同的记录,则只加入一次,可以根据自已情况设置
            if (tem!=null && ((History)tem.Value).Url.ToLower() == h.Url.ToLower())
            {
                return;
            }

            //当当前节点不为空,或该节点的上一个节点也不为空时,则删除该节点的前所有节点(模拟IE)
            //模拟IE对前进后退的处理
            if (HistoryCurrentNode != null && HistoryCurrentNode.Previous != null)
            {
                DelNode(HistoryCurrentNode);
            }

            //处理限制最大记录条数
            if (MaxList > 0)
            {
                if (HistoryList.Count + 1 > MaxList)
                {
                    HistoryList.RemoveLast();
                }
            }
            HistoryCurrentNode = new LinkedListNode<History>(h);
            HistoryList.AddFirst(HistoryCurrentNode);
        }
        /**//// <summary>
        /// 后退
        /// </summary>
        public static void Back()
        {
            HistoryCurrentNode = HistoryCurrentNode.Next;
        }
        /**//// <summary>
        /// 前进
        /// </summary>
        public static void Go()
        {
            HistoryCurrentNode = HistoryCurrentNode.Previous;
        }
        /**//// <summary>
        /// 删除指定节点前所有节点
        /// </summary>
        /// <param name="node"></param>
        private static void DelNode(LinkedListNode<History> node)
        {
            while (node.Previous != null)
            {
                HistoryList.Remove(node.Previous);
            }
        }
       
    }

Tags:使用 双链 实现

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接