WinForm在多个屏幕上创建多个Form

最近在GitHub上改进一开源工具 Sedentary-reminder 时遇到的一个问题,如何在多个屏幕上同时创建Form以实现该工具的功能。

Sedentary-reminder功能介绍

该工具是由WeiJunbo开发的基于WinForm的提醒久坐小工具,具体内容可以看代码库
在使用了一段时间后我发现,在用户规定的时间耗尽后,程序锁屏仅限于主屏幕,这对于使用多个屏幕进行开发的我来说实在是鸡肋,经常会出现主屏幕对我的鼠标和键盘进行了锁定,但副屏幕依旧在修改论文的情况。
因此我的需求很明确了,如何将锁定屏幕的窗体应用到每块屏幕?

多屏幕创建多Form

程序的工作机制是当用户设定的时间耗尽时,程序会关闭WorkForm,开启RestForm,同时锁定键盘和鼠标,当设定的休息时间到时,关闭RestForm,开启WorkForm,因此修改变为:当用户设定的时间耗尽时,程序关闭WorkForm,在每个界面开启RestForm,当设定的休息时间到时,关闭RestForm,并在主屏幕创建WorkForm。

识别和操作屏幕

对多屏的操作,网络上有一些资料,这篇博文写的比较详细c# Winform 开发分屏显示应用程序
首先识别屏幕信息依赖Screen类,Screen的Primary参数可以判断是否是主屏幕,Screen.Bound存储了各屏幕的边界信息。
因此将逻辑修改为,根据Screen.AllScreens.Count()识别屏幕数量,创建相应数量的窗体,对每个窗体最重要的是要进行如下设置:

this.StartPosition = FormStartPosition.Manual;
this.Location = Screen.Bound.Location;

第一行代码决定了窗口的开始位置将由其Location决定,然后又将其Location指定为当前屏幕的Location。
当RestForm关闭时,不需要为每个RestForm创建WorkForm,因此识别出主屏幕,当主屏幕对应的Form关闭时创建WorkForm,其他Form直接关闭即可解决上述问题。

对上述工具的修改可以参见我的代码库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值