⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pagedwebbrowser.cs

📁 自己做的一个浏览器~~大家请看看~如果合意给个彩头
💻 CS
📖 第 1 页 / 共 2 页
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Collections;

namespace APLib.Windows.Control
{
	/// <summary>
	/// 多页面浏览器控件
	/// 继承自TabControl,配合WebPage使用
	/// </summary>
	public partial class PagedWebBrowser : TabControl
	{
		/// <summary>
		/// 拦截弹出窗口级别枚举
		/// </summary>
		public enum PopupBlockLevel : int
		{
			None = 0,
			Low = 1,
			Medium = 2,
			High = 3
		}

		#region ScriptErrorEventArgs

		/*
		/// <summary>
		/// 脚本错误事件参数类
		/// </summary>
		public class ScriptErrorEventArgs : EventArgs
		{
			/// <summary>
			/// 出错的页面地址
			/// </summary>
			private string url;
			/// <summary>
			/// 错误描述
			/// </summary>
			private string description;
			/// <summary>
			/// 错误行号码
			/// </summary>
			private int lineNumber;
			/// <summary>
			/// 获取错误页面的地址
			/// </summary>
			public string Url { get { return url; } }
			/// <summary>
			/// 获取错误描述
			/// </summary>
			public string Description { get { return description; } }
			/// <summary>
			/// 获取错误行号
			/// </summary>
			public int LineNumber { get { return lineNumber; } }

			/// <summary>
			/// 构造函数
			/// </summary>
			/// <param name="url">错误网址</param>
			/// <param name="description">错误描述</param>
			/// <param name="lineNumber">错误行号</param>
			public ScriptErrorEventArgs(string url, string description, int lineNumber)
			{
				this.url = url;
				this.description = description;
				this.lineNumber = lineNumber;
			}
		}

		/// <summary>
		/// 脚本错误事件
		/// </summary>
		public event EventHandler<ScriptErrorEventArgs> ScriptError;
		*/

		#endregion

		/// <summary>
		/// 拦截弹出窗口级别
		/// </summary>
		private PopupBlockLevel blockLevel;
		/// <summary>
		/// 页面列表
		/// </summary>
		private SequencePageList<WebPage> pageList;
		/// <summary>
		/// 拦截脚本错误
		/// </summary>
		private bool suppressError;
		/// <summary>
		/// 命令列表
		/// </summary>
		private Hashtable cmdList;

		#region 属性

		/// <summary>
		/// 获取当前浏览器对象
		/// </summary>
		public WebBrowserEx Web
		{
			get
			{
				WebPage page = SelectedTab as WebPage;
				if (page != null)
					return page.Web;
				return null;
			}
		}
		/// <summary>
		/// 获取或设置拦截弹出窗口级别
		/// </summary>
		public PopupBlockLevel BlockLevel
		{
			get
			{
				return blockLevel;
			}
			set
			{
				blockLevel = value;
				if (BlockLevelChanged != null)
					BlockLevelChanged(this, EventArgs.Empty);
			}
		}
		/// <summary>
		/// 获取或设置拦截脚本错误属性
		/// </summary>
		public bool SuppressError
		{
			get
			{
				return suppressError;
			}
			set
			{
				suppressError = value;
				if (SuppressErrorChanged != null)
					SuppressErrorChanged(this, EventArgs.Empty);
			}
		}

		#endregion

		#region 事件

		/// <summary>
		/// 拦截弹出窗口级别改变事件
		/// </summary>
		public event EventHandler BlockLevelChanged;
		/// <summary>
		/// 拦截脚本错误属性改变事件
		/// </summary>
		public event EventHandler SuppressErrorChanged;
		/// <summary>
		/// 后退状态改变事件
		/// </summary>
		public event EventHandler CanGoBackChanged;
		/// <summary>
		/// 前进状态改变事件
		/// </summary>
		public event EventHandler CanGoForwardChanged;
		/// <summary>
		/// 状态栏文本改变事件
		/// </summary>
		public event EventHandler StatusTextChanged;
		/// <summary>
		/// 跳转到网址完成事件
		/// </summary>
		public event WebBrowserNavigatedEventHandler Navigated;
		/// <summary>
		/// 下载进度改变事件
		/// </summary>
		public event WebBrowserProgressChangedEventHandler ProgressChanged;
		/// <summary>
		/// 网址改变事件
		/// </summary>
		public event EventHandler PageLocationChanged;

		#endregion

		#region SequencePageList

		/// <summary>
		/// 页面次序管理泛型类
		/// </summary>
		/// <typeparam name="T">泛型参数</typeparam>
		protected class SequencePageList<T> : IDisposable where T : class
		{
			/// <summary>
			/// 页面序列
			/// </summary>
			private List<T> list;

			/// <summary>
			/// 构造函数
			/// </summary>
			public SequencePageList()
			{
				list = new List<T>();
			}
			/// <summary>
			/// 获取序列最顶层的页面
			/// </summary>
			/// <returns>最顶层的页面</returns>
			public T GetTopPage()
			{
				if (list.Count > 0)
					return list[list.Count - 1];
				else
					return null;
			}
			/// <summary>
			/// 将指定的页面置于序列顶层
			/// </summary>
			/// <param name="page">要置顶的页面</param>
			public void Select(T page)
			{
				if (page != null)
				{
					if (list.Contains(page))
					{
						list.Remove(page);
						list.Add(page);
					}
				}
			}
			/// <summary>
			/// 添加页面到序列最底层
			/// </summary>
			/// <param name="page">要添加的页面</param>
			public void Add(T page)
			{
				if (page != null)
					list.Insert(0, page);
			}
			/// <summary>
			/// 从序列移除指定页面
			/// </summary>
			/// <param name="page">要移除的页面</param>
			public void Remove(T page)
			{
				if (list.Contains(page))
					list.Remove(page);
			}

			#region IDisposable Members

			/// <summary>
			/// 删除页面序列
			/// </summary>
			public void Dispose()
			{
				list.Clear();
			}

			#endregion
		}

		#endregion

		/// <summary>
		/// 构造函数
		/// </summary>
		public PagedWebBrowser()
		{
			InitializeComponent();
			BlockLevel = PopupBlockLevel.None;
			pageList = new SequencePageList<WebPage>();
			cmdList = new Hashtable();
			suppressError = false;
		}

		#region Protected

		/// <summary>
		/// 命令处理函数
		/// </summary>
		/// <param name="command">命令字符串</param>
		/// <param name="web">浏览器对象</param>
		protected void ProcessCommand(string command, WebBrowserEx web)
		{
			if (web == null)
				return;
			if (command == null)
			{
				web.Navigate("about:blank");
			}
			else
			{
				int i = command.IndexOf(" ");
				if (i >= 0)
				{
					string type = command.Substring(0, i);
					string param = command.Substring(i + 1);
					if (cmdList.ContainsKey(type))
					{
						web.Navigate(Fitler(string.Format(cmdList[type] as string, param)));
						return;
					}
				}
				web.Navigate(command);
			}
		}
		/// <summary>
		/// 过滤字符串使其符合Query要求

⌨️ 快捷键说明

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