winForm在多显示器(主显示器 + 扩展显示器)上显示最大化和还原操作。

一、问题描述:
客户笔记本电脑连接了一个显示器,将其设置成了“扩展这些显示器”,将winForm窗体从主显示器拖到扩展显示器上,点击放大和还原的时候,界面的大小和位置不正确
winForm在多显示器(主显示器 + 扩展显示器)上显示最大化和还原操作。
解决方案如下:
1,this.FormBorderStyle != System.Windows.Forms.FormBorderStyle.None的情况,将窗体最大化和还原操作:
这种情况下,winForm窗体时在当前显示器的工作区域内,是不会覆盖任务栏,同时位置和大小都是理性状态的。也就不说了

2,this.FormBorderStyle != System.Windows.Forms.FormBorderStyle.None的情况,利用From的属性WindowsState属性控制窗体最大化和还原,将窗体最大化和还原操作:
界面如下:
winForm在多显示器(主显示器 + 扩展显示器)上显示最大化和还原操作。
winForm在多显示器(主显示器 + 扩展显示器)上显示最大化和还原操作。
不管是在主显示器上最大化还是在扩展显示器上最大化,都会遮挡任务栏(连腾讯qq都截不了屏,就不附图了)
除了遮挡了任务栏外,其他效果都还是可以的,但是客户要求不可以占用任务栏

3,重新指定界面属性获取和设置窗体最大化后的大小MaximizedBounds为当前显示器的工作区域的大小
这样的话,在主显示器上的显示大小都是正确的,但是移动到扩展显示器上后,就会出现问题了,这时候的location和size还不是我想要的效果。下面的图就是我在扩展显示器上的最大化效果
winForm在多显示器(主显示器 + 扩展显示器)上显示最大化和还原操作。

4,重新指定winForm的Location和Size和MaximizedBounds三个属性
winForm在多显示器(主显示器 + 扩展显示器)上显示最大化和还原操作。
执行this.WindowState = FormWindowState.Normal后Location的各项值都为0,也就是说在扩展屏幕上还原的时候,是还原到主显示器上的左上角上了,会出闪屏的效果。还是有问题,位置还是不正确

5,放弃用微软内部提供的方法,实在是没招了
不管怎么搞,都是在改变winForm的Location和Size和MaximizedBounds属性值,进行界面的绘制。那就自己写呗,放大缩小的时候自行指定窗体要在当前显示器上显示的位置和大小。
winForm在多显示器(主显示器 + 扩展显示器)上显示最大化和还原操作。
这样可以自己指定要显示的位置和窗体的大小,完美的绕开了微软内部是怎么实现的,避开闪屏等一些问题