C#中通过事件实现窗口停靠边缘自动隐藏的功能

分享

这次是在TS-ABU中加入的功能,网上其实有很多方法实现,但是都比较难懂,索性自己研究了一套方法,与各位分享。(目前还缺少移动到边缘再激活的功能)
网上有获取鼠标位置再判断的,也可以,但是我一开始没想到这种方法。。。我的总体思路是给所有控件都绑定事件,Let's start!

首先在窗口所在类的头部添加变量申明:

bool movef;//移动方向,true时为左移,反之
Point needp1, needp2;//分别对应露出来那一点的坐标与鼠标放上去后移动到的坐标
int width = SystemInformation.WorkingArea.Width;//分辨率的宽
int height = SystemInformation.WorkingArea.Height;//分辨率的长

接着在右侧找到窗口的属性,点击上面的闪电图标,在Load、MouseEnter、MouseLeave中分别添加事件,这里以我的窗口名称FormMain为例,分别添加FormMain_Load、FormMain_MouseEnter和FormMain_MouseLeave。
分别修改其中的内容:

private void FormMain_Load(object sender, EventArgs e)
{
    this.Location = new Point(width - 80, 100);//这是默认位置,请自行修改
    needp1 = new Point(width - 160, 100);//这是露出来那一点的坐标,请自行修改
    needp2 = new Point(width - this.Size.Width, 100);//这是鼠标放上去后移动到的坐标,请自行修改
    foreach (Control c in this.Controls)
    {
        c.MouseEnter += new EventHandler(FormMain_MouseEnter);
        //c.MouseLeave += new EventHandler(FormMain_MouseLeave); 发现不需要。。。
    }
}

private void FormMain_MouseEnter(object sender, EventArgs e)
{
    movef = true;
    timerMove.Start();
}

private void FormMain_MouseLeave(object sender, EventArgs e)
{
    movef = false;
    timerMove.Start();
}

其次我们添加一个Timer,更改名称为timerMove,修改Interval属性为1.
接着双击timerMove,生成了timerMove_Tick,修改为如下内容:

private void timerMove_Tick(object sender, EventArgs e)
{
    Point p = this.Location;
    if (movef == true)
    {
        if (p.X <= needp1.X)
        {
            timerMove.Stop();
            return;
        }
        p.Offset(-5, 0);//移动的步长,这里为5个像素
        this.Location = p;
    }
    else
    {
        if (p.X >= needp2.X)
        {
            timerMove.Stop();
            return;
        }
        p.Offset(5, 0);
        this.Location = p;
     }
}

赶紧看一下效果吧^_^。
当然这段代码有局限性,比如只能停靠在右边(只要简单修改一下代码就实现了啊喂= =)。至于怎样让窗口移动到边缘时激活事件,可以在FormMain_MouseEnter和FormMain_MouseLeave中加入一个if,判断this.Location的X与Y,读者可以自己研究一下,应该不会难,我的TS-ABU的需求是达到了~

阅读更多

在Windows Server 2022中安装使用Altstore

1. 正常安装iTunes,iCloud安装版不支持Windows Server,Server虽然能装appx,但是Altstore不支持appx版 2. 在Windows 10/11中安装iCloud,然后将C:\Program Files (x86)\Common Files\Apple中的Apple Application Support和Internet Services拷贝到相同目录 3. Enjoy! 如果仍要使用iCloud,可以手动安装appx,参见https://www.reddit.com/r/sysadmin/comments/sz3zh9/windows_server_icloud_microsoft_store_success/ 参考 https://www.reddit.com/r/jailbreak/comments/rp5buz/tutorial_how_to_

By SkiTiSu

解读iw list命令中valid interface combinations的含义,以及AP+STA实例

直接开讲 想查看网卡能干什么,我们一般使用这个命令: iw list 在每个网卡信息的下方都有这样一段信息 valid interface combinations: * #{ managed } <= 1, #{ AP, mesh point } <= 16, total <= 16, #channels <= 1, STA/AP BI must match, radar detect widths: { 20 MHz (no HT), 20 MHz, 40 MHz, 80 MHz, 80+80 MHz, 160 MHz } 解读一下其中代表的含义: STA(managed)最多开1个,

By SkiTiSu
强刷Netgear M1(MR1100) 4G路由器教程

强刷Netgear M1(MR1100) 4G路由器教程

准备工具 0. M1本体和USB-C数据线 1. 驱动程序 AC78xSDrivers.exe 2. 强刷工具 fdt.exe 3. 需要刷入的固件 xxx.secc.spk 特别注意看清固件文件名的型号跟路由器身上的标签是否一致,固件不一致也能刷入,但是并不会解锁信道,反而可能产生一些稳定性问题。 步骤 1. 安装好驱动程序 2. 拔掉电池,按住电源按钮,插入USB数据线到电脑,这时指示灯会在橙色和蓝色间闪烁,等待屏幕亮起,显示“Downloading software update”,即可松开电源按钮,这时M1已经进入Recovery模式 3. 把固件和fdt放在一个文件夹,按住Shift单击右键,选择“在此处打开命令提示符或PowerShell”,输入以下命令: fdt.exe -f 固件文件名 4. 等待自动刷机,过程约5~10分钟,

By SkiTiSu

解决Win10 1080端口无权限使用的问题

更新到Win10 20H1后,某V字软件竟然一直报错,查看了一下错误信息是 bind: An attempt was made to access a socket in a way forbidden by its access permissions. 经过一番查找,可能是因为开启了Hyper-V导致系统保留了这一段得端口( https://blog.ll00.cn/archives/159.html ),解决方法有两种: 1. 更改端口号 直接将本地监听端口改成一个比较大得或非保留即可,如10800 查看系统保留得端口在cmd中输入netsh interface ipv4 show excludedportrange protocol=tcp 2. 更改系统dynamicport 查看:netsh int ipv4 show

By SkiTiSu
苏ICP备19030749号-1