C# 窗口停靠隐藏类
引用:https://www.cnblogs.com/lidj/archive/2012/07/06/2579923.html
最近修改了一下.可以更方便的用在各个窗体上了
代码也简洁很多.直接引用一下就能使用
不过只处理了窗口的左上右三个方向 .下边没处理


/// <summary>
/// 窗口停靠隐藏类
/// 使用方法
/// private FormDock formDock = null;
/// formDock = new FormDock(this,300);
/// </summary>
public class FormDock
{
#region 自定义声明
/// <summary>
/// 定义计时器
/// </summary>
private Timer StopRectTimer = new Timer(); /// <summary>
/// 贴边设置
/// </summary>
internal AnchorStyles StopAanhor = AnchorStyles.None; /// <summary>
/// 父级窗口实例
/// </summary>
private Form parentForm = null; private Point m_TempPoiont;//临时点位置
private Point m_LastPoint;//窗体最小化前的坐标点位置 #endregion #region 构造函数
/// <summary>
/// 自动停靠
/// </summary>
/// <param name="frmParent">父窗口对象</param>
public FormDock(Form frmParent)
{
parentForm = frmParent;
parentForm.LocationChanged += new EventHandler(parentForm_LocationChanged);
StopRectTimer.Tick += new EventHandler(timer1_Tick); //注册事件
StopRectTimer.Interval = 500; //计时器执行周期
StopRectTimer.Start(); //计时器开始执行
}
/// <summary>
/// 自动停靠
/// </summary>
/// <param name="frmParent">父窗口对象</param>
/// <param name="_trimInterval">时钟周期</param>
public FormDock(Form frmParent, int _trimInterval)
{
parentForm = frmParent;
parentForm.LocationChanged += new EventHandler(parentForm_LocationChanged);
StopRectTimer.Tick += new EventHandler(timer1_Tick); //注册事件
StopRectTimer.Interval = _trimInterval; //计时器执行周期
StopRectTimer.Start(); //计时器开始执行
}
#endregion /// <summary>
/// 时钟的开始
/// </summary>
public void TimerStart()
{
StopRectTimer.Start();
} /// <summary>
/// 时钟的停止
/// </summary>
public void TimerStop()
{
StopRectTimer.Stop();
} #region 窗口位置改变事件
/// <summary>
/// 窗口位置改变事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void parentForm_LocationChanged(object sender, EventArgs e)
{
if (parentForm.Location.X == -32000 && parentForm.Location.Y == -32000)
{
m_LastPoint = m_TempPoiont;//最小化了,m_LastPoint就是最小化前的位置。
}
else
{
m_TempPoiont = parentForm.Location;
} this.mStopAnthor();
}
#endregion #region 计时器 周期事件
/// <summary>
/// 计时器 周期事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void timer1_Tick(object sender, EventArgs e)
{
if (parentForm.Bounds.Contains(Cursor.Position))
{
this.FormShow();
}
else
{
this.FormHide();
}
}
#endregion #region 窗口停靠位置计算
/// <summary>
/// 窗口停靠位置计算
/// </summary>
private void mStopAnthor()
{
if (parentForm.Top <= 0)
{
StopAanhor = AnchorStyles.Top;
}
else if (parentForm.Left <= 0)
{
StopAanhor = AnchorStyles.Left;
}
else if (parentForm.Left >= Screen.PrimaryScreen.Bounds.Width - parentForm.Width)
{
StopAanhor = AnchorStyles.Right;
}
else
{
StopAanhor = AnchorStyles.None;
}
}
#endregion #region 窗体不贴边显示
/// <summary>
/// 窗体不贴边显示
/// </summary>
public void FormShow()
{
switch (this.StopAanhor)
{
case AnchorStyles.Top:
parentForm.Location = new Point(parentForm.Location.X, 0);
break;
case AnchorStyles.Left:
parentForm.Location = new Point(0, parentForm.Location.Y);
break;
case AnchorStyles.Right:
parentForm.Location = new Point(Screen.PrimaryScreen.Bounds.Width - parentForm.Width, parentForm.Location.Y);
break;
}
}
#endregion #region 窗体贴边隐藏
/// <summary>
/// 窗体贴边隐藏
/// </summary>
private void FormHide()
{
switch (this.StopAanhor)
{
case AnchorStyles.Top:
if (parentForm.WindowState == FormWindowState.Minimized)
{
parentForm.Location = this.m_LastPoint;
break;
}
parentForm.Location = new Point(parentForm.Location.X, (parentForm.Height - 2) * (-1));
break;
case AnchorStyles.Left:
parentForm.Location = new Point((-1) * (parentForm.Width - 2), parentForm.Location.Y);
break;
case AnchorStyles.Right:
parentForm.Location = new Point(Screen.PrimaryScreen.Bounds.Width - 2, parentForm.Location.Y);
break;
}
}
#endregion
C# 窗口停靠隐藏类的更多相关文章
- 借鉴网上的winform模仿QQ窗口停靠功能稍作改动
2015-07-11 15:24:04 1 using System; using System.Collections.Generic; using System.ComponentModel; u ...
- [WPF疑难] 模式窗口被隐藏后重新显示时变成了非模式窗口
原文:[WPF疑难] 模式窗口被隐藏后重新显示时变成了非模式窗口 [WPF疑难] 模式窗口被隐藏后重新显示时变成了非模式窗口 周银辉 现象: 大家可以试试下面这个很有趣但会带来Defect的现象:当我 ...
- WPF 使用 AppBar 将窗口停靠在桌面上,让其他程序不占用此窗口的空间(附我封装的附加属性)
原文:WPF 使用 AppBar 将窗口停靠在桌面上,让其他程序不占用此窗口的空间(附我封装的附加属性) 本文介绍如何使用 Windows 的 AppBar 相关 API 实现固定停靠在桌面上的特殊窗 ...
- 请解释ASP.NET 中的web 页面与其隐藏类之间的关系?
一个ASP.NET 页面一般都对应一个隐藏类,一般都在ASP.NET 页面的声明中指定了隐藏类例如一个页面 Tst1.aspx 的页面声明如下 <%@ Page language="c ...
- 使用android 隐藏类和方法
在应用程序中添加与android.jar包相同的包目录,添加要隐藏类和方法.保证能编译通过就可以.
- firefox快捷键窗口和标签类
firefox快捷键窗口和标签类: 关闭标签: Ctrl+W 或 Ctrl+F4关闭窗口: Ctrl+Shift+W 或 Alt+F4向左移动标签: Ctrl+左方向键 或 Ctrl+上方向键向右移动 ...
- C#中一个窗口是一个类呢,还是一个窗口类的实例呢?(转)
C#中一个窗口是一个类呢,还是一个窗口类的实例呢? 答: 没有一个人说到重点上. 一个窗口,它不是仅仅用一个类可以描述的: 首先,这个窗口的数据类型类型,是从Form类派生下来的,也就是说它的定义是一 ...
- 【Iterm2】如何解决iterm2窗口自动隐藏的问题
一.问题描述 当我们使用Iterm2的Hotkey Windom功能时,通过快捷键唤起Iterm2窗口后,然后鼠标在iterm2窗口之外触发点击操作就会让 iterm2窗口自动隐藏.. 这样有时候会觉 ...
- 请解释ASP. NET中的web页面与隐藏类之间的关系
请解释ASP.NET中的web页面与其隐藏类之间的关系 其实页面与其隐藏类之间就是一个部分类的关系,你在页面上放一个一个的控件就是在这个类中定义一个一个的属性, 因为是同一个类的部分类的关系,所以隐藏 ...
- 请解释ASP.NET中的web页面与其隐藏类之间的关系
其实页面与其隐藏类之间就是一个部分类的关系,你在页面上放一个一个的控件就是在这个类中定义一个一个的属性, 因为是同一个类的部分类的关系,所以隐藏类可以访问到页面上控件,这样做是为了把展现与处理逻辑分开 ...
随机推荐
- 【MongoDB】C# .Net MongoDB常用语法
1.1.驱动安装 使用NuGet包管理器安装MongoDB C#驱动:MongoDB.Driver 1.2. C#连接MongoDB //获取MongoDB连接客户端 MongoClient clie ...
- 【Azure 应用服务】在创建Web App Service的时候,选Linux系统后无法使用Mysql in App
问题描述 如图上,是App Services在Windows环境中,系统自带了MySQL In App功能.而在,Linux环境中,没有发现Mysql in App功能,是不是无法在Linux中使用呢 ...
- JAVA微服务分布式事务的几种实现方式
基础理论 CAP理论 一致性(Consistency) :在分布式系统中所有的数据备份,在同一时刻都保持一致状态,如无法保证状态一致,直接返回错误: 可用性(Availability):在集群中一部分 ...
- 十四: Mysql数据结构选择的合理性
Mysql数据结构选择的合理性 从MySQL的角度讲,不得不考虑一个现实问题就是磁盘I/O. 如果我们能让索引的数据结构尽量减少硬盘的I/O操作,所消耗的时间也就越小.可以说,磁盘的I/O操作次数对索 ...
- Android---Android Studio项目目录结构分析.
1. .gradle 和.idea 这两个目录下放置的都是 Android Studio 自动生成的一些文件,我们无须关心,也不要去手 动编辑. 2. app 项目中的代码.资源等内容几乎都是放置在这 ...
- Learning by teaching --- 费曼学习法
世界上存在成千上万种学习法,如果上天只让我掌握一种,那一定就是"费曼学习法". 介绍 费曼学习法是由诺贝尔物理学奖获得者理查德·费曼提出的一种学习方法,其核心思想是将所学内容用自己 ...
- Zabbix“专家坐诊”第198期问答汇总
问题一 Q:请问一下,自带的思科SNMP交换机模板,怎么不监控down的接口? A1:这种一般在自动发现规则里加个过滤器,过滤出IFSTATUS匹配(1|3)的就能实现只发现up的端口了. A2: 1 ...
- Java加密技术(三)——PBE算法
Javapbe对称加密 除了DES,我们还知道有DESede(TripleDES,就是3DES).AES.Blowfish.RC2.RC4(ARCFOUR)等多种对称加密方式,其实现方式大同小 ...
- 引领文旅新体验!3DCAT实时云渲染助力打造“永不落幕”的湾区文采会元宇宙
2022年11月25日至27日,2022年粤港澳大湾区公共文化和旅游产品(东莞)采购会(简称"湾区文采会")在广东省东莞市文化馆举行. 文采会期间,文采会元宇宙线上虚拟展厅全新亮相 ...
- 建筑、工程和施工产业中的3D可视化
3D视觉效果是传达想法,概念或设计的强大工具,它也用于在概念阶段推销该想法. AEC行业的可视化已经走了很长一段路,从将设计提交给客户进行批准,现在用于项目的每个阶段,从项目投标,获得客户和理事会的批 ...