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

📄 autohidecontainer.cs

📁 SharpDevelop2.0.0 c#开发免费工具
💻 CS
字号:
// <file>
//     <copyright see="prj:///doc/copyright.txt"/>
//     <license see="prj:///doc/license.txt"/>
//     <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
//     <version>$Revision: 1273 $</version>
// </file>

using System;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.Core;

namespace ICSharpCode.SharpDevelop.Gui
{
	public class AutoHideContainer: Panel
	{
		protected Control control;
		
		bool autoHide = true;
		bool showOverlay = false;
		bool showOnMouseMove = true;
		bool showOnMouseDown = true;
		int activatorHeight = 1;
		
		protected bool mouseIn;
		
		public virtual bool AutoHide {
			get {
				return autoHide;
			}
			set {
				autoHide = value;
				Reformat();
			}
		}
		
		public bool ShowOverlay {
			get {
				return showOverlay;
			}
			set {
				showOverlay = value;
				Reformat();
			}
		}
		
		protected virtual void Reformat()
		{
			if (autoHide) {
				if (showOverlay) {
					// Show as overlay
					this.Height = activatorHeight;
					control.Dock = DockStyle.None;
					control.Size = new Size(this.Width, control.PreferredSize.Height);
					if (this.Dock != DockStyle.Bottom) {
						control.Location = new Point(this.Left, this.Top);
					} else {
						control.Location = new Point(this.Left, this.Top - control.PreferredSize.Height + 1);
					}
					Parent.Controls.Add(control);
					control.BringToFront();
				} else {
					// Hidden
					this.Height = activatorHeight;
					control.Dock = DockStyle.None;
					control.Size = new Size(this.Width, 1);
					control.Location = new Point(0, activatorHeight);
					this.Controls.Add(control);
				}
			} else {
				// Permanently shown
				this.Height = PreferredHeight;
				control.Dock = DockStyle.Fill;
				this.Controls.Add(control);
			}
		}
		
		protected virtual int PreferredHeight {
			get {
				return control.PreferredSize.Height;
			}
		}
		
		public AutoHideContainer(Control control)
		{
			if (control == null) throw new ArgumentNullException("control");
			this.control = control;
			this.MouseMove += delegate { if (showOnMouseMove) ShowOverlay = true; };
			this.MouseDown += delegate { if (showOnMouseDown) ShowOverlay = true; };
			control.MouseEnter += OnControlMouseEnter;
			control.MouseLeave += OnControlMouseLeave;
			Reformat();
		}
		
		protected virtual void OnControlMouseEnter(object sender, EventArgs e)
		{
			mouseIn = true;
		}
		
		protected virtual void OnControlMouseLeave(object sender, EventArgs e)
		{
			mouseIn = false;
			ShowOverlay = false;
		}
		
		public bool ShowOnMouseMove {
			get {
				return showOnMouseMove;
			}
			set {
				showOnMouseMove = value;
			}
		}
		
		public bool ShowOnMouseDown {
			get {
				return showOnMouseDown;
			}
			set {
				showOnMouseDown = value;
			}
		}
		
		public Color ActivatorColor {
			get {
				return this.ForeColor;
			}
			set {
				this.ForeColor = value;
			}
		}
		
		public int ActivatorHeight {
			get {
				return activatorHeight;
			}
			set {
				activatorHeight = value;
			}
		}
	}
}

⌨️ 快捷键说明

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