c# 窗体相关操作(最大化/最小化/关闭/标题栏)
/// <summary>
/// 窗体跟随鼠标移动的标记
/// </summary>
private bool normalmoving = false;
/// <summary>
/// 最大化窗体跟随鼠标Normal和移动的标记
/// </summary>
private bool maxmoving = true;
/// <summary>
/// 临时存储上一次鼠标位置
/// </summary>
private Point oldMousePosition;
/// <summary>
/// 右侧最大化/最小化/关闭按钮的总宽度
/// </summary>
int ritghtbuttonslength = 180;
关闭按钮相关操作
#region 页面关闭的相关操作
private void picBoxMainClose_Click(object sender, EventArgs e)
{
this.Close();
}
private void picBoxMainClose_MouseEnter(object sender, EventArgs e)
{
this.picBoxMainClose.Image =global::LocDevelopDesClient.Properties.Resources.close_mainMouse;
}
private void picBoxMainClose_MouseLeave(object sender, EventArgs e)
{
this.picBoxMainClose.Image = global::LocDevelopDesClient.Properties.Resources.close_main;
}
#endregion
窗体最大化相关操作
#region 窗体最大化的相关操作
//包括标题栏双击窗口的变化及页面最大化图表点击
private void picBoxMaxSize_Click(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Maximized)
{
this.WindowState = FormWindowState.Normal;
}
else if (this.WindowState == FormWindowState.Normal)
{
this.MaximumSize = new Size(Screen.FromControl(this).WorkingArea.Width, Screen.FromControl(this).WorkingArea.Height);
this.WindowState = FormWindowState.Maximized;
}
} private void picBoxMaxSize_MouseEnter(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Normal)
{
this.picBoxMaxSize.Image = global::LocDevelopDesClient.Properties.Resources.maxSize_mouse;
}
else if (this.WindowState == FormWindowState.Maximized)
{
this.picBoxMaxSize.Image = global::LocDevelopDesClient.Properties.Resources.normal_mouse;
} } private void picBoxMaxSize_MouseLeave(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Normal)
{
this.picBoxMaxSize.Image = global::LocDevelopDesClient.Properties.Resources.maxSize;
}
else if (this.WindowState == FormWindowState.Maximized)
{
this.picBoxMaxSize.Image = global::LocDevelopDesClient.Properties.Resources.normal;
}
}
#endregion
窗体最小化相关操作
#region 窗体最小化的相关操作
private void picBoxMinSize_Click(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Normal || this.WindowState == FormWindowState.Maximized)
{
this.WindowState = FormWindowState.Minimized;
}
}
private void picBoxMinSize_MouseEnter(object sender, EventArgs e)
{
this.picBoxMinSize.Image = global::LocDevelopDesClient.Properties.Resources.minsize_mouse;
} private void picBoxMinSize_MouseLeave(object sender, EventArgs e)
{
this.picBoxMinSize.Image = global::LocDevelopDesClient.Properties.Resources.minsize1;
}
#endregion
标题栏相关操作
#region 主页面标题栏的相关操作
private void palTitle_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
oldMousePosition = new Point(-e.X, -e.Y);
normalmoving = true;
}
}
private void palTitle_MouseUp(object sender, MouseEventArgs e)
{
maxmoving = true;
//pnlFirstMenu.Cursor = Cursors.Default;
if (normalmoving)
{
normalmoving = false;
}
}
private void palTitle_MouseMove(object sender, MouseEventArgs e)
{
//如果leftlag为true则进行移动
if (!normalmoving) return;
if (this.WindowState == FormWindowState.Maximized && e.Button == MouseButtons.Left && maxmoving)
{
this.WindowState = FormWindowState.Normal;
//当窗体最大时,鼠标点击的位置比例
double bili = e.X * 1.0 / Screen.PrimaryScreen.Bounds.Width;
//如果点击位置太靠右,则窗体normal后,鼠标会在右侧按钮上方
//计算缩小后数据离右侧的距离
double rightlength = (1.0 - bili) * this.Width;
int x = 0;
if (rightlength < ritghtbuttonslength)
{
x = (int)(e.X - (bili * this.Width) + ritghtbuttonslength - rightlength);
//更改oldMousePosition的位置
oldMousePosition.X += (int)(e.X - (bili * this.Width) + ritghtbuttonslength - rightlength);
}
else
{
x = (int)(e.X - (bili * this.Width));
//更改oldMousePosition的位置
oldMousePosition.X += (int)(e.X - (bili * this.Width));
}
this.Location = new Point(x, 0);
}
else if (e.Button == MouseButtons.Left)
{
{
Point mouseSet = MousePosition;
mouseSet.Offset(oldMousePosition.X, oldMousePosition.Y); //设置移动后的位置
Location = mouseSet;
if (MousePosition.Y <= 0)
{
this.MaximumSize = new Size(Screen.FromControl(this).WorkingArea.Width, Screen.FromControl(this).WorkingArea.Height);
this.WindowState = FormWindowState.Maximized;
maxmoving = false;
}
}
}
}
#endregion
c# 窗体相关操作(最大化/最小化/关闭/标题栏)的更多相关文章
- Electron 无边框窗口最大化最小化关闭功能
Electron 无边框窗口最大化最小化关闭功能 目的 实现无边框窗口,并添加最大化最小化和关闭功能 前提 了解Electron 主进程和渲染进程的通讯 了解 BrowserWindow相关功能 操作 ...
- Qt 窗口操作函数(置顶、全屏,最大化最小化按钮设置等)
一.窗口置顶 与 取消置顶 void MainWindow::on_windowTopButton_clicked() { if (m_flags == NULL) { m_flags = windo ...
- PyQt:无边框自定义标题栏及最大化最小化窗体大小调整
环境 Python3.5.2 PyQt5 陈述 隐藏掉系统的控制栏,实现了自定义的标题控制栏,以及关闭/最大化/最小化的功能,自由调整窗体大小的功能(跟随一个大佬学的),代码内有详细注释 只要把Mai ...
- 【转】ubuntu 12.04 LTS将关闭最大化最小化移动到右上角
原文网址:http://www.4byte.cn/learning/114801.html ubuntu 12.04 LTS将关闭最大化最小化移动到右上角 还是按下“ALT +F2”组合键,输入g ...
- C#程序实现窗体的最大化/最小化
C#程序实现窗体的最大化/最小化 http://blog.csdn.net/jiangqin115/article/details/41251215 private void button1_Clic ...
- Q窗口操作函数(窗口最大化,全屏,隐藏最大化最小化按钮)
//Qt主窗口没有最小化,最大化按钮且最大化显示 int main(int argc, char *argv[]) { QApplication a(argc, argv); TestQtForWi ...
- delphi ,1)控件根据窗口大小,一直居中显示 2)显示最大化最小化按钮控件
一.控件根据窗口大小,一直居中显示 1)onResize:当窗体尺寸改变时发生 例子:如何使控件随窗口的放大和缩小动态改变自己的大小,使控件“保存.返回”在窗口变大变小中随着变. 在Panel调用 p ...
- layer满屏/禁止最大化最小化 可以做选择框使用
1.layer弹窗最大化 var index=layer.open(); layer.full(index); 2.layer禁止最大化最小化 layer.open( [ type:2, title: ...
- C#winform如何主窗口最大化最小化默认大小
this.WindowState = FormWindowState.Minimized; bool b = true; private void button2_Click(object sende ...
随机推荐
- clickhouse-mysql数据同步
clickhouse版本:22.1.2.2 1.Mysql引擎(不推荐) CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] EN ...
- Matplotlib 3.0 秘籍·翻译完成
原文:Matplotlib 3.0 Cookbook 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. 在线阅读 ApacheCN 面试求职交 ...
- Net6 DI源码分析Part2 Engine,ServiceProvider
ServiceProvider ServiceProvider是对IServiceProvider实现,它有一个internal的访问修饰符描述的构造,并需要两个参数IServiceCollectio ...
- AT3913 XOR Tree
经过长时间的思考,我发现直接考虑对一条链进行修改是很难做出本题的,可能需要换一个方向. 可以发现本题中有操作的存在,是没有可以反过来做的做法的,因此正难则反这条路应该走不通. 那么唯一的办法就是简化这 ...
- Tomcat临时目录及java.io.tmpdir对应的目录
最近客户现场的技术支持接连反馈了一个问题:导入数据的时候,上传的excel会在服务器上生成一个临时文件,而这个临时文件都在 tomcat 的安装目录下,如果上传次数比较多的话,就会导致tomcat安 ...
- JAVA类加载器一 父类委托机制
感谢原文作者:不将就! 原文链接:https://www.cnblogs.com/byron0918/p/5770653.html 类加载器负责将.class文件加载到内存中,并为之生成对应的Clas ...
- 入门-k8s部署应用 (三)
Kubernetes 部署应用 在 k8s 上进行部署前,首先需要了解一个基本概念 Deployment Deployment 译名为 部署.在k8s中,通过发布 Deployment,可以创建应用程 ...
- 在TCP文件传输中如何判断java流的末尾
感谢前辈们的解答:https://bbs.csdn.net/topics/280085530 问题描述: 服务端向客户端发送数据流,服务端发完了数据不关闭流. 我在客户端读流,我无法读到-1,所以无法 ...
- jsp中<%@ taglib prefix="s" uri="/struts-tags"%>标签意思
@taglib表明引用标签.类似java中的import语句prefix="s" 引用的名称在页面可以使用,就像java中生成的一个对象名,以后调用的时候直接使用<s:xxx ...
- web虚拟主机、日志分割以及日志分析
目录 一.构建虚拟web主机 1.1 概述 1.2 支持的虚拟主机类型 1.3 部署虚拟主机步骤 1.3.1 基于域名的虚拟主机 (1)为虚拟主机提供域名解析 (2)为虚拟主机准备网页文档 (3)添加 ...