operationrecorder.cs

来自「案例1如何应用HTTP协议下载文件」· CS 代码 · 共 84 行

CS
84
字号
using System;
using System.Collections;
namespace Utilities
{
	/// <summary>
	/// 完成对树节点操作的前进与后退功能:类似于Windows资源管理器与IE。
	/// </summary>
	public class OperationRecorder
	{
		//内部数据存入集合中
		private ArrayList BackOpts = new ArrayList();
		private ArrayList ForwardOpts = new ArrayList();

		//最多存储50个操作
		private const int MaxOpt = 50;

		public void AddOpt(object opt)
		{
			if(opt == null)
				return;

			//不允许连续两次加入同样的节点
			if(BackOpts.Count > 0 && opt == BackOpts[BackOpts.Count - 1])
				return;

			if(this.BackOpts.Count == MaxOpt)
			{
				//集合中操作已满,则删除最早的一个操作
				this.BackOpts.RemoveAt(0);
			}

			BackOpts.Add(opt);

			//清空前进集合
			this.ForwardOpts.Clear();
		}
		/// <summary>
		/// 后退,如果无操作,则返回null
		/// </summary>
		/// <returns></returns>
		public object Back()
		{
			object opt = null;
			int count = this.BackOpts.Count;

			if(count > 0)//挑出最近一次操作
			{
				opt = this.BackOpts[count - 1];
				this.BackOpts.RemoveAt(count - 1);
				//移入前进的集合中
				this.ForwardOpts.Add(opt);
			}
			return opt;
		}
		/// <summary>
		/// 前进,如果无操作,则返回null
		/// </summary>
		/// <returns></returns>
		public object Forward()
		{
			object opt = null;
			int count = this.ForwardOpts.Count;

			if(count > 0)//挑出最近一次操作
			{
				opt = this.ForwardOpts[count - 1];
				this.ForwardOpts.RemoveAt(count - 1);
				//移入后退的集合中
				this.BackOpts.Add(opt);
			}
			return opt;
		}

		/// <summary>
		/// 初始化
		/// </summary>
		public void Init()
		{
			this.BackOpts.Clear();
			this.ForwardOpts.Clear();
		}
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?