`
izuoyan
  • 浏览: 8965028 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Winforms: Form的大小不能超过屏幕的分辨率

阅读更多

一、 现象描述

Form的大小超过屏幕的分辨率时,Form不能完全显示,超出屏幕分辨率部分的Form以及上面所有控件都不能显示。

二、问题重现

1. 把显示器的分辨率设1280×1024,把Windows字体大小设为100%

2. Visual Studio中创建一个Winforms的项目;

3. Form1Size属性设为1200, 800

4. Form1上添加一个Button,并把它的拖到Form1的右下角;

5. 在下面两种情况下运行该程序:

a) 保持Windows字体大小不变,把显示器的分辨率设为1024×768

b) 保持屏幕分辨率不变,把Windows字体大小设为150%

我们发现Form1不能完全显示,右下角的button1消失。

三、原因分析

Windows对窗口的大小有限制。窗口最大不能超过屏幕的分辨率加上若干个像素。我们在Windows中打开记事本(Notepad),用鼠标拖拽边框拉大记事本,我们就会发现当记事本的大小稍微超出屏幕的大小后,就不能再拉大了。

Winforms窗口的大小同样也受到Windows的限制。在Form.SizeMSDN文档中提到:此属性的最大值受窗体运行时所在屏幕的分辨率的限制。该值不能大于屏幕尺寸12 像素(即水平尺寸 + 12 和垂直尺寸 + 12)。因此大小为1200×800Form不能在1024×768的分辨率下完全显示。另外,当Windows的字体大小设为为150%时,Winforms会自动拉大Form以保证上面的文字能够以大字体正确显示。因此在字体以100%情况下设置大小1200×800Form,在字体大小为150%时,实际大小会超过1280×1024,所以也不能正常显示。

四、解决方案

首先,我们不建议设计非常大的Form。当Form很大的时候,通常也意味着会很复杂,而友好的人机交互界面应尽量避免非常复杂的对话框。因此,如果可能,不妨将复杂的Form分解成几个Form,或者用TabControl分解成若干个页面。

如果的确需要很大的Form,可以把Form.AutoScroll属性设为true。这样当Form受到屏幕分辨率的限制不能完全显示时,Winforms会自动在Form上添加滚动条,这样用户就可以通过拖动滚动条来操作原先不能显示的控件。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics