首页 > 编程语言 >c#WPF窗体操作类

c#WPF窗体操作类

时间:2023-04-17 11:23:28浏览次数:42  
标签:Hide c# else 窗体 false WPF type 窗口 Left

WPF窗体屏幕边缘吸附

  #region 侧吸
        private new bool Hide = false;       //用来表示当前隐藏状态,例如Hide=false就是不在隐藏状态
        string type = "";                   //用来表示窗口隐藏在哪个方向
        private void SliderTimer_Tick(object sender, EventArgs e)   
        {
            //this.TopMost = false;        //窗体不显示在所有软件最前面
            int dif = 20;
            Mouses.POINT mp = new Mouses.POINT();//获得当前鼠标位置 
            Mouses.GetCursorPos(out mp);
            Point pt = new Point(mp.X, mp.Y);
            System.Windows.Forms.Screen screen = System.Windows.Forms.Screen.PrimaryScreen;
            int width = screen.Bounds.Width;            //获取屏幕的宽度     
            int height = screen.Bounds.Height;          //获取屏幕的高度
            if (!this.RestoreBounds.Contains(pt))       //判断鼠标是否在窗体内 
            {
                //如果不在窗体内
                if (Hide == false)
                {
                    if (this.Left < 10)           //窗口左边碰到屏幕最左边
                    {
                        this.Left = -this.Width + 3;    //隐藏窗口,窗口宽度加3取反(为负数)
                        Hide = true;
                        type = "left";                  //窗口隐藏在左边
                    }
                    else if (width - this.Left - this.Width < 10)//窗口右边碰到屏幕最右边
                    {
                        this.Left = width - 3;            //隐藏窗口,窗口宽度加3取反(为负数)
                        Hide = true;
                        type = "right";                 //窗口隐藏在右边
                    }
                    else if (this.Top < 10)      //窗口上边碰到屏幕最上边
                    {
                        this.Top = -this.Height + 3;    //隐藏窗口,窗口高度加3取反(为负数)
                        Hide = true;
                        type = "up";                    //窗口隐藏在上边
                    }
                }
            }
            else
            {    //如果在窗体内
                if (this.Left > dif && type == "left")
                {
                    Hide = false;
                }
                else if (width - this.Left - this.Width > dif && type == "right")
                {
                    Hide = false;
                }
                else if (this.Top > dif && type == "up")
                {
                    Hide = false;
                }
                //如果在窗体内且之前是隐藏状态
                if (Hide == true)
                {
                    this.Topmost = true;        //窗体显示在所有软件最前面
                    if (type == "left")
                    {
                        this.Left = 0;
                        Hide = false;
                    }
                    else if (type == "right")
                    {
                        this.Left = width - this.Width;
                        Hide = false;
                    }
                    else if (type == "up")
                    {
                        this.Top = 0;
                        Hide = false;
                    }
                }
            }
        }
       
        private DispatcherTimer SlideTimer;

        private void EnableSlider()
        {
            this.SlideTimer = new DispatcherTimer();
            this.SlideTimer.Tick += SliderTimer_Tick;
            this.SlideTimer.Interval = TimeSpan.FromMilliseconds(10);
            this.SlideTimer.Start();
            this.SizeChanged += (o, e) =>
            {
                if (this.WindowState == WindowState.Minimized)
                {
                    this.SlideTimer.Stop();
                }
                else if (this.WindowState == WindowState.Normal)
                {
                    this.SlideTimer.Start();
                }
            };
        }
        #endregion
View Code

WPF中窗体移动

   base.OnMouseLeftButtonDown(e);
            //获取鼠标相对标题栏位置
            Point Pos = e.GetPosition(this);
            //如果鼠标位置在标题栏内 允许拖动
            if (e.LeftButton == MouseButtonState.Pressed)
            {
                if (Pos.X >= 0 && Pos.X < this.ActualWidth && Pos.Y >= 0 && Pos.Y < 200)
                {
                    this.DragMove();
                }
            }
View Code

 

标签:Hide,c#,else,窗体,false,WPF,type,窗口,Left
From: https://www.cnblogs.com/noaheallen/p/17325248.html

相关文章

  • On Anaconda
    安装安装anaconda 离线环境中新增环境可以直接拷贝base文件夹 卸载可以直接删除anaconda文件夹,并且删除相应的环境变量 rmrf~/anaconda3#deletetheanacondadirvi~/.bashrc#deletetheexportvariablesin.bashrc{...}source~/.bashrc#activiatethen......
  • 从 HTTP 到 gRPC:APISIX 中 etcd 操作的迁移之路
    罗泽轩,API7.ai 技术专家/技术工程师,ApacheAPISIXPMC成员。原文链接ApacheAPISIX现有基于HTTP的etcd操作的局限性etcd在2.x版本的时候,对外暴露的是HTTP1(以下简称HTTP)的接口。etcd升级到3.x版本后,其对外API的协议从普通的HTTP切换到了gRPC。为了兼顾......
  • 【Qt】ubuntu18.04 qtcreator点击图标打不开,缺少GLIBC_2.28
    遇到的问题是点击qtcreator的图标打不开,像其他qt相关的软件可以然后从安装目录下../Tools/QtCreator/bin运行./qtcreator出现报错:./qtcreator:/lib/x86_64-linux-gnu/libc.so.6:version`GLIBC_2.28'notfound(requiredby/home/bck18vm/software/Qt/anzhuang/Tools/QtCrea......
  • uni-app实现类似confirm提示框的效果
    uni.showModal({title:'提示',content:'这是一个模态弹窗',success:function(res){if(res.confirm){console.log('用户点击确定');}elseif(res.cancel){console.log('用户点击取消'......
  • 镭速Raysync v6.6.8.0版本发布
    最近镭速发布了v6.6.8.0版本,已经发布上线了。主要更新内容有服务器下发任务支持指定客户端,客户端增加日志清理和日志压缩,自动删除源文件保持源目录结构,支持将文件投递给其他成员等功能,详细的更新内容如下:一、服务器下发任务支持指定客户端在后管创建服务器任务时,可以指定想要......
  • DCCI
    http://www.dcci.com.cn/ DCCI互联网数据中心(DCCIDATACENTEROFCHINAINTERNET,简称DCCI),中国互联网第三方研究机构&数据平台,最富实验探索、创新前沿色彩的互联网洞察引领者。以市场调研、Panel软件、代码嵌入、海量数据挖掘、语义信息处理等多种领先技术手段为基础,DCCI进行网站......
  • memcache的客户端
    Memcached的java客户端已经存在三个了:官方提供的基于传统阻塞io的客户端 、DustinSallings实现的基于javanio的spymemcached和XMemcached。memcache常用Java客户端有三个:1、memcachedclientforJava  2、spymemcached 3、xmemcachedxmemcached上述三者中最优秀的。官网......
  • 敏捷开发领域里的 Epic 以及和 User Story 的关联关系
    在敏捷软件开发领域,Epic(史诗)通常是指一个大型的、跨越多个迭代周期的用户需求或者业务功能。Epic通常包含多个相关的故事(UserStory),这些故事描述了Epic所包含的具体功能和需求。Epic是敏捷开发中用于管理大型需求和复杂业务的一种方式。它可以帮助团队更好地理解用户需求、制......
  • Linux开机启动rc.local不生效的一般解决方案
    给rc.local添加可执行权限sudochmod+x/etc/rc.d/rc.localrc-local.service增加install节点配置sudovi/usr/lib/systemd/system/rc-local.service在文件中添加以下内容[Install]WantedBy=multi-user.target启动rc-local服务systemctlstartrc-local设......
  • c++笔记——类模板
    类模板的几个简单测试例程几个要点:(1)类模板类型,在实例化时需要显式类型名称(2)已经显式类型后,传入的参数如果不是相应类型,则会发生强制转换(3)在类外定义的成员函数,需要加上模板参数列表和类作用域,且类作用域带类型列表(4)多个参数模板时,可以在函数中使用其中若干个,不用全部都使用。......