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

📄 freetextbox.cs

📁 一个基于 Internet Explorer 中 MSHTML 技术的 ASP.NET 服务器控件
💻 CS
📖 第 1 页 / 共 5 页
字号:
using System;
using System.Collections;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using FreeTextBoxControls.Common;
using FreeTextBoxControls.Design;

[assembly:TagPrefix("FreeTextBoxControls", "FTB")]
namespace FreeTextBoxControls
{
	#region 处理回传事件
	/// <summary>
	/// 回传事件委托
	/// </summary>
	public delegate void ToolbarPostBackButtonEventHandler(object sender, ToolbarPostBackButtonEventArgs e);

	/// <summary>
	/// 处理回传事件
	/// </summary>
	public class ToolbarPostBackButtonEventArgs : System.EventArgs
	{
		private readonly string title = string.Empty;

		public ToolbarPostBackButtonEventArgs(string title)
		{
			this.title = title;
		}

		public string Title
		{
			get
			{
				return title;
			}
		}
	}
	#endregion

	/// <summary>
	/// 一个基于 MSHTML 的 ASP.NET 可视化编辑器。
	/// </summary>
	[ToolboxData("<{0}:FreeTextBox runat=server></{0}:FreeTextBox>"),ValidationPropertyAttribute("Text"),Designer(typeof(FreeTextBoxControls.Design.FreeTextBoxDesigner)),DescriptionAttribute("一个基于 MSHTML 的 ASP.NET 可视化编辑器。")]
	public class FreeTextBox : Control, IPostBackDataHandler, INamingContainer, IPostBackEventHandler
	{
		#region 回传事件
		/// <summary>
		/// The event fired when a Save button is pressed.
		/// </summary>
		[DescriptionAttribute("当 保存 按钮按下时发生。")]
		public event EventHandler SaveClick;

		/// <summary>
		/// The event fired when any ToolbarPostBackButton is pressed.
		/// </summary>
		public event ToolbarPostBackButtonEventHandler ToolbarPostBackButtonClick;

		/// <summary>
		/// Event for Save button
		/// </summary>
		[DescriptionAttribute("引发 SaveClick 事件。")]
		protected virtual void OnSaveClick(EventArgs e)
		{
			if (SaveClick != null)
			{
				SaveClick(this, e);
			}
		}

		/// <summary>
		/// Event for ToolbarPostBackButton button
		/// </summary>
		protected virtual void OnToolbarPostBackButtonClick(ToolbarPostBackButtonEventArgs e)
		{
			if (ToolbarPostBackButtonClick != null)
			{
				ToolbarPostBackButtonClick(this, e);
			}
		}

		public virtual void RaisePostBackEvent(string eventArgument)
		{
			switch (eventArgument)
			{
				case "Save":
					this.OnSaveClick(EventArgs.Empty);
					break;
				default:
					// calls the post back button event handler
					this.OnToolbarPostBackButtonClick(new ToolbarPostBackButtonEventArgs(eventArgument));
					break;
			}
		}

		public void RaisePostDataChangedEvent()
		{
			// nothing happens for text changed
		}

		public bool LoadPostData(String postDataKey, NameValueCollection values)
		{
			string PresentValue = this.ViewStateText;
			string PostedValue = values[this.ClientID];
			if (!PresentValue.Equals(PostedValue))
			{
				this.Text = PostedValue;
				return true;
			}
			else
			{
				return false;
			}
		}
		#endregion

		#region 属性集合
		/// <summary>
		/// Because CSS classes can't begin with an underscore, this property compartmentalizes removing the initial _ when FTB is inside of other controls
		/// </summary>
		private string CssID
		{
			get
			{
				string cssID = this.ClientID;
				while (cssID.Substring(0,1) == "_")
				{
					cssID = cssID.Substring(1);
				}
				return cssID;
			}
		}
		private string ViewStateText
		{
			get
			{
				object savedState = this.ViewState["Text"];
				return (savedState == null) ? "" : (string) savedState;
			}
		}
		/// <summary>
		/// 获取去除 HTML 标记后的纯文本。
		/// </summary>
		[CategoryAttribute("输出"),BrowsableAttribute(false),DescriptionAttribute("获取去除 HTML 标记后的纯文本。")]
		public string HtmlStrippedText
		{
			get
			{
				return Regex.Replace(this.Text,"<(.|\n)+?>","");
			}
		}
		/// <summary>
		/// 工具条集合
		/// </summary>
		[DescriptionAttribute("工具条集合")]
		public ToolbarList Toolbars = new ToolbarList();
		/// <summary>
		/// 获取或设置编辑器中的内容。
		/// </summary>
		[CategoryAttribute("输出"),DescriptionAttribute("获取或设置编辑器中的内容,输出前将经过一些整理。")]
		public string Text
		{
			get
			{
				string output = this.ViewStateText;
				if (this.RemoveServerNameFromUrls || this.RemoveScriptNameFromBookmarks)
				{
					try
					{
						PostProcessor processor = new PostProcessor();
						if (this.RemoveScriptNameFromBookmarks)
						{
							string server = Page.Request.ServerVariables["HTTP_HOST"];
							string script = Page.Request.ServerVariables["SCRIPT_NAME"];
							string qstring = Page.Request.QueryString.ToString();
							output = processor.RemoveScriptNameFromBookmarks(output,server,script,qstring);
							output = processor.RemoveScriptNameFromBookmarks(output,server,script,qstring.Replace("&","&amp;"));
						}
						if (this.RemoveServerNameFromUrls)
							output = processor.RemoveServerNameFromUrls(output,Page.Request.ServerVariables["HTTP_HOST"]);
					}
					catch (Exception ex)
					{
						throw new Exception(ex.ToString());
					}
				}
				return output;
			}
			set
			{
				ViewState["Text"] = value;
			}
		}
		/// <summary>
		/// 获取编辑器中的原始内容。
		/// </summary>
		[CategoryAttribute("输出"),BrowsableAttribute(false),DescriptionAttribute("获取编辑器中的原始内容。")]
		public string RawText
		{
			get
			{
				object savedState = this.ViewState["Text"];
				return (savedState == null) ? "" : (string) savedState;
			}
		}
		/// <summary>
		/// 获取经 Server.HtmlEncode 编码后的文本。
		/// </summary>
		[CategoryAttribute("输出"),BrowsableAttribute(false),DescriptionAttribute("获取经 Server.HtmlEncode 编码后的文本。")]
		public string HtmlEncodedText
		{
			get
			{
				return Page.Server.HtmlEncode(this.Text);
			}
		}
		/// <summary>
		/// 获取或设置 FreeTextBox 的粘贴模式。可以为 Default(默认), NoScript(自动去除脚本), NoHtml(自动去除 HTML 标记), Disabled(禁用粘贴功能)。
		/// </summary>
		[CategoryAttribute("行为"),DescriptionAttribute("获取或设置 FreeTextBox 的粘贴模式。可以为 Default(默认), NoScript(自动去除脚本), NoHtml(自动去除 HTML 标记), Disabled(禁用粘贴功能)。")]
		public PasteMode PasteMode
		{
			get
			{
				object savedState = this.ViewState["PasteMode"];
				return (savedState == null) ? PasteMode.Default : (PasteMode) savedState;
			}
			set
			{
				ViewState["PasteMode"] = value;
			}
		}
		/// <summary>
		/// 获取或设置是否注册样式表内容。
		/// </summary>
		[CategoryAttribute("行为"),DescriptionAttribute("获取或设置是否注册样式表内容。")]
		public bool ParseStyleSheet
		{
			get
			{
				object savedState = this.ViewState["ParseStyleSheet"];
				return (savedState == null) ? true : (bool) savedState;
			}
			set
			{
				ViewState["ParseStyleSheet"] = value;
			}
		}
		/// <summary>
		/// 获取或设置在编辑器中按TAB键时焦点是否切换到其他控件。
		/// </summary>
		[CategoryAttribute("行为"),DescriptionAttribute("获取或设置在编辑器中按TAB键时焦点是否切换到其他控件。")]
		public TabMode TabMode
		{
			get
			{
				object savedState = this.ViewState["TabMode"];
				return (savedState == null) ? TabMode.Default : (TabMode) savedState;
			}
			set
			{
				ViewState["TabMode"] = value;
			}
		}
		/// <summary>
		/// 控件在 IFrame 中的 Tab 键顺序
		/// </summary>
		[CategoryAttribute("行为"),DescriptionAttribute("控件的 Tab 键顺序")]
		public int TabIndex
		{
			get
			{
				object savedState = this.ViewState["TabIndex"];
				return (savedState == null) ? -1 : (int) savedState;
			}
			set
			{
				ViewState["TabIndex"] = value;
			}
		}
		/// <summary>
		/// 获取或设置一个值,该值指示编辑器是否为只读状态。
		/// </summary>
		[CategoryAttribute("行为"),DescriptionAttribute("获取或设置一个值,该值指示编辑器中的内容是否允许编辑。")]
		public bool ReadOnly
		{
			get
			{
				object savedState = this.ViewState["ReadOnly"];
				return (savedState == null) ? false : (bool) savedState;
			}
			set
			{
				ViewState["ReadOnly"] = value;
			}
		}
		/// <summary>
		/// 获取或设置一个值,该值指示是否将编辑器返回内容中 URL 的主机地址去除。如果不去除,则虚拟路径自动转换为绝对路径。
		/// </summary>
		[CategoryAttribute("行为"),DescriptionAttribute("获取或设置一个值,该值指示是否将编辑器返回内容中 URL 的主机地址去除。如果不去除,则虚拟路径自动转换为绝对路径。")]
		public bool RemoveServerNameFromUrls
		{
			get
			{
				object savedState = this.ViewState["RemoveServerNameFromUrls"];
				return (savedState == null) ? true : (bool) savedState;
			}
			set
			{
				ViewState["RemoveServerNameFromUrls"] = value;
			}
		}
		/// <summary>
		/// 获取或设置一个值,该值指示是否简化书签的 URL。
		/// </summary>
		[CategoryAttribute("行为"),DescriptionAttribute("获取或设置一个值,该值指示是否简化书签的 URL。")]
		public bool RemoveScriptNameFromBookmarks
		{
			get
			{
				object savedState = this.ViewState["RemoveScriptNameFromBookmarks"];
				return (savedState == null) ? true : (bool) savedState;
			}
			set
			{
				ViewState["RemoveScriptNameFromBookmarks"] = value;
			}
		}
		/// <summary>
		/// 获取或设置一个值,该值指示是否允许 SSL。默认为 false。
		/// </summary>
		[CategoryAttribute("行为"),DescriptionAttribute("获取或设置一个值,该值指示是否允许 SSL。默认为 false。")]
		public bool EnableSsl
		{
			get
			{
				object savedState = this.ViewState["EnableSsl"];
				return (savedState == null) ? false : (bool) savedState;
			}
			set
			{
				ViewState["EnableSsl"] = value;
			}
		}
		/// <summary>
		/// 获取或设置一个值,该值指示从 HTML 视图切换到设计视图时提示用户可能发生的 HTML 代码改变。默认为 false。
		/// </summary>
		[CategoryAttribute("行为"),DescriptionAttribute("获取或设置一个值,该值指示从 HTML 视图切换到设计视图时提示用户可能发生的 HTML 代码改变。默认为 false")]
		public bool AlertClientToChangesInDesignMode
		{
			get
			{
				object savedState = this.ViewState["AlertClientToChangesInDesignMode"];
				return (savedState == null) ? false : (bool) savedState;
			}
			set
			{
				ViewState["AlertClientToChangesInDesignMode"] = value;
			}
		}
		/// <summary>
		/// 获取或设置一个值,该值指示是否使用成对的引号。默认为 true。
		/// </summary>
		[CategoryAttribute("行为"),DescriptionAttribute("获取或设置一个值,该值指示是否使用成对的引号。默认为 true。")]
		public bool EnableCurlyQuotes
		{
			get
			{
				object savedState = this.ViewState["EnableCurlyQuotes"];
				return (savedState == null) ? true : (bool) savedState;
			}
			set
			{
				ViewState["EnableCurlyQuotes"] = value;
			}
		}

⌨️ 快捷键说明

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