1. /// <summary>
  2. /// 窗体跟随鼠标移动的标记
  3. /// </summary>
  4. private bool normalmoving = false;
  5. /// <summary>
  6. /// 最大化窗体跟随鼠标Normal和移动的标记
  7. /// </summary>
  8. private bool maxmoving = true;
  9. /// <summary>
  10. /// 临时存储上一次鼠标位置
  11. /// </summary>
  12. private Point oldMousePosition;
  13. /// <summary>
  14. /// 右侧最大化/最小化/关闭按钮的总宽度
  15. /// </summary>
  16. int ritghtbuttonslength = 180;   

关闭按钮相关操作

  1.     #region 页面关闭的相关操作
  2. private void picBoxMainClose_Click(object sender, EventArgs e)
  3. {
  4. this.Close();
  5. }
  6. private void picBoxMainClose_MouseEnter(object sender, EventArgs e)
  7. {
  8. this.picBoxMainClose.Image =global::LocDevelopDesClient.Properties.Resources.close_mainMouse;
  9. }
  10. private void picBoxMainClose_MouseLeave(object sender, EventArgs e)
  11. {
  12. this.picBoxMainClose.Image = global::LocDevelopDesClient.Properties.Resources.close_main;
  13. }
  14. #endregion

窗体最大化相关操作

  1.      #region 窗体最大化的相关操作
  2.     //包括标题栏双击窗口的变化及页面最大化图表点击
  3. private void picBoxMaxSize_Click(object sender, EventArgs e)
  4. {
  5. if (this.WindowState == FormWindowState.Maximized)
  6. {
  7. this.WindowState = FormWindowState.Normal;
  8. }
  9. else if (this.WindowState == FormWindowState.Normal)
  10. {
  11. this.MaximumSize = new Size(Screen.FromControl(this).WorkingArea.Width, Screen.FromControl(this).WorkingArea.Height);
  12. this.WindowState = FormWindowState.Maximized;
  13. }
  14. }
  15.  
  16. private void picBoxMaxSize_MouseEnter(object sender, EventArgs e)
  17. {
  18. if (this.WindowState == FormWindowState.Normal)
  19. {
  20. this.picBoxMaxSize.Image = global::LocDevelopDesClient.Properties.Resources.maxSize_mouse;
  21. }
  22. else if (this.WindowState == FormWindowState.Maximized)
  23. {
  24. this.picBoxMaxSize.Image = global::LocDevelopDesClient.Properties.Resources.normal_mouse;
  25. }
  26.  
  27. }
  28.  
  29. private void picBoxMaxSize_MouseLeave(object sender, EventArgs e)
  30. {
  31. if (this.WindowState == FormWindowState.Normal)
  32. {
  33. this.picBoxMaxSize.Image = global::LocDevelopDesClient.Properties.Resources.maxSize;
  34. }
  35. else if (this.WindowState == FormWindowState.Maximized)
  36. {
  37. this.picBoxMaxSize.Image = global::LocDevelopDesClient.Properties.Resources.normal;
  38. }
  39. }
  40. #endregion

窗体最小化相关操作

  1.     #region 窗体最小化的相关操作
  2. private void picBoxMinSize_Click(object sender, EventArgs e)
  3. {
  4. if (this.WindowState == FormWindowState.Normal || this.WindowState == FormWindowState.Maximized)
  5. {
  6. this.WindowState = FormWindowState.Minimized;
  7. }
  8. }
  9. private void picBoxMinSize_MouseEnter(object sender, EventArgs e)
  10. {
  11. this.picBoxMinSize.Image = global::LocDevelopDesClient.Properties.Resources.minsize_mouse;
  12. }
  13.  
  14. private void picBoxMinSize_MouseLeave(object sender, EventArgs e)
  15. {
  16. this.picBoxMinSize.Image = global::LocDevelopDesClient.Properties.Resources.minsize1;
  17. }
  18. #endregion

标题栏相关操作

  1.      #region 主页面标题栏的相关操作
  2.  
  3. private void palTitle_MouseDown(object sender, MouseEventArgs e)
  4. {
  5. if (e.Button == MouseButtons.Left)
  6. {
  7. oldMousePosition = new Point(-e.X, -e.Y);
  8. normalmoving = true;
  9. }
  10. }
  11.  
  12. private void palTitle_MouseUp(object sender, MouseEventArgs e)
  13. {
  14. maxmoving = true;
  15. //pnlFirstMenu.Cursor = Cursors.Default;
  16. if (normalmoving)
  17. {
  18. normalmoving = false;
  19. }
  20. }

  21. private void palTitle_MouseMove(object sender, MouseEventArgs e)
  22. {
  23. //如果leftlag为true则进行移动
  24. if (!normalmoving) return;
  25. if (this.WindowState == FormWindowState.Maximized && e.Button == MouseButtons.Left && maxmoving)
  26. {
  27. this.WindowState = FormWindowState.Normal;
  28. //当窗体最大时,鼠标点击的位置比例
  29. double bili = e.X * 1.0 / Screen.PrimaryScreen.Bounds.Width;
  30. //如果点击位置太靠右,则窗体normal后,鼠标会在右侧按钮上方
  31. //计算缩小后数据离右侧的距离
  32. double rightlength = (1.0 - bili) * this.Width;
  33. int x = 0;
  34. if (rightlength < ritghtbuttonslength)
  35. {
  36. x = (int)(e.X - (bili * this.Width) + ritghtbuttonslength - rightlength);
  37. //更改oldMousePosition的位置
  38. oldMousePosition.X += (int)(e.X - (bili * this.Width) + ritghtbuttonslength - rightlength);
  39. }
  40. else
  41. {
  42. x = (int)(e.X - (bili * this.Width));
  43. //更改oldMousePosition的位置
  44. oldMousePosition.X += (int)(e.X - (bili * this.Width));
  45. }
  46. this.Location = new Point(x, 0);
  47.  
  48. }
  49. else if (e.Button == MouseButtons.Left)
  50. {
  51. {
  52. Point mouseSet = MousePosition;
  53. mouseSet.Offset(oldMousePosition.X, oldMousePosition.Y); //设置移动后的位置
  54. Location = mouseSet;
  55. if (MousePosition.Y <= 0)
  56. {
  57. this.MaximumSize = new Size(Screen.FromControl(this).WorkingArea.Width, Screen.FromControl(this).WorkingArea.Height);
  58. this.WindowState = FormWindowState.Maximized;
  59. maxmoving = false;
  60. }
  61. }
  62. }
  63. }
  64. #endregion

c# 窗体相关操作(最大化/最小化/关闭/标题栏)的更多相关文章

  1. Electron 无边框窗口最大化最小化关闭功能

    Electron 无边框窗口最大化最小化关闭功能 目的 实现无边框窗口,并添加最大化最小化和关闭功能 前提 了解Electron 主进程和渲染进程的通讯 了解 BrowserWindow相关功能 操作 ...

  2. Qt 窗口操作函数(置顶、全屏,最大化最小化按钮设置等)

    一.窗口置顶 与 取消置顶 void MainWindow::on_windowTopButton_clicked() { if (m_flags == NULL) { m_flags = windo ...

  3. PyQt:无边框自定义标题栏及最大化最小化窗体大小调整

    环境 Python3.5.2 PyQt5 陈述 隐藏掉系统的控制栏,实现了自定义的标题控制栏,以及关闭/最大化/最小化的功能,自由调整窗体大小的功能(跟随一个大佬学的),代码内有详细注释 只要把Mai ...

  4. 【转】ubuntu 12.04 LTS将关闭最大化最小化移动到右上角

    原文网址:http://www.4byte.cn/learning/114801.html ubuntu 12.04 LTS将关闭最大化最小化移动到右上角   还是按下“ALT +F2”组合键,输入g ...

  5. C#程序实现窗体的最大化/最小化

    C#程序实现窗体的最大化/最小化 http://blog.csdn.net/jiangqin115/article/details/41251215 private void button1_Clic ...

  6. Q窗口操作函数(窗口最大化,全屏,隐藏最大化最小化按钮)

    //Qt主窗口没有最小化,最大化按钮且最大化显示  int main(int argc, char *argv[]) { QApplication a(argc, argv); TestQtForWi ...

  7. delphi ,1)控件根据窗口大小,一直居中显示 2)显示最大化最小化按钮控件

    一.控件根据窗口大小,一直居中显示 1)onResize:当窗体尺寸改变时发生 例子:如何使控件随窗口的放大和缩小动态改变自己的大小,使控件“保存.返回”在窗口变大变小中随着变. 在Panel调用 p ...

  8. layer满屏/禁止最大化最小化 可以做选择框使用

    1.layer弹窗最大化 var index=layer.open(); layer.full(index); 2.layer禁止最大化最小化 layer.open( [ type:2, title: ...

  9. C#winform如何主窗口最大化最小化默认大小

    this.WindowState = FormWindowState.Minimized; bool b = true; private void button2_Click(object sende ...

随机推荐

  1. proxy_buffer代理缓冲区

    目录 一:代理缓冲区 1.代理缓存区模块介绍 二:案例 1.配置文件 2.测试 3.重启 4.lb01服务器(负载均衡) 5.网址配置文件 6.测试 7.重启 8.DNS解析 9.网址测试 10.日志 ...

  2. iptables的概念与底层原理(详解)

    目录 一:iptables 1.iptables简介 2.什么是防火墙? 3.防火墙种类 二:iptables基本介绍 1.解析内容 三:iptables流程(讲解) 1.流入本机 2.解析(流入本机 ...

  3. linux字符编码防止乱码

    一:linux字符编码 en_US.UTF-8 : 美式英文,utf-8 zh_CN.UTF-8 临时优化 export LANG=zh_CN.UTF-8 : 设置编码 永久优化 vim /etc/l ...

  4. arduino物联网学习

    arduino物联网学习 目录 arduino物联网学习 20200215 OLED屏幕使用教程 材料: 软件 代码注释 完整代码 Arduino IDE 开发 ESP-01S/ESP-01物联网实战 ...

  5. kicad6 封装库的管理

    kicad6 封装库的管理 kicad6 的封装编辑器有很多莫名其妙的地方, 让人在第一次用的时候摸不着头脑. 在下面稍微总结一下封装库的操作 1. 封装库的创建 选择 文件 -> 新建库 有两 ...

  6. 「IOI2009」旅行商

    题目传送门 首先,看到这道题感觉就像dp(然鹅没什么用). 一个美好的设想 假如没有两个展销会在同一天开展:前途光明 暴力dp,复杂度o(\(n^2\)). 没有同一天的展销会 暴力dp慢,是因为本质 ...

  7. Log4j2日志技术总结

    前言 现在流行是SLF4j和Log4j2组合的日志技术,但为了日志技术归类,故前因后果都将做一下介绍. 市场上流行的日志框架 JUL java util logging Java开发团队开发,Jdk原 ...

  8. Mysql8.0主从配置

    环境Centos7.6 ,mysql8.0 Mysql主从配置 1.1 配置环境: 本人在vm下做的实验,linux版本是centos的7.0版本,然后Mysql版本为此时较新的8.0.13版本.做最 ...

  9. JSP中的请求转发与重定向

    在说请求转发和重定向之前,得了解下JSP九大内置对象中的response和request response:将服务器端数据发送到客户端,可通过在客户端浏览器中显示,用户浏览页面的重定向以及在客户端创建 ...

  10. JSP页面乱码解决

    1. tomcat 设置端口处加上 URIEncoding="UTF-8" 2. tomcat 的bin文件夹下的catalina.bat中如下位置加上如下编码:-Dfile.en ...