Winforms:Form的最小宽度限制

一、问题描述

我们给Form设置一个比较小的宽度,但Form的实际宽度可能会大于我们设置的值。

二、问题重现

1.       Win7中,把主题设为一种Aero主题;

2.       Visual Studio中,创建一个Winforms工程;

3.       Form1中,添加一个按钮;

4.       双击button1,并为button1添加如下Click事件处理器;

        private void button1_Click(object sender, EventArgs e)

        {

            Form newForm = new Form();

            newForm.Width = 100;

 

            MessageBox.Show(newForm.Width.ToString(), "newForm.Width");

        }

5.       编译运行程序,点击button1

我们发现消息框中显示的宽度并不是我们试图设置的100,而是132

三、问题分析

Winforms在设置Form宽度的Form.set_Width中,我们会把试图设置的大小和SystemInformation.MinWindowTrackSize进行比较Winforms不允许Form的大小比MinWindowTrackSize小。也就是说MinWindowTrackSize规定了Form最小的大小。如果我们设置的值比MinWindowTrackSize要小,Winforms会把Form的大小设置为MinWindowTrackSize

SystemInformation.MinWindowTrackSize的大小随着Windows的系统设置的改变而改变。在Win7中,如果其主题为Aero,那么MinWindowTrackSize的宽度为132。如果把Win7的主题设为Classic,那么MinWindowTrackSize的宽度为112

所以在前面的代码中,由于我们试图设置的值100小于 MinWindowTrackSize的宽度132,所以最终Form的宽度为132

另外,Winforms还提供了一个属性Form.MinimumSize来定义Form最小的大小。如果Form.MinimumSizeMinWindowTrackSize还要小,则Form.MinimumSize不起作用。如果Form.MinimumSize大于MinWindowTrackSize,则Form.MinimumSize 成为Form最终的最小大小。

我们可以用如下一段代码来总结Winforms中对Form的最小宽度的限制:

        private void button1_Click(object sender, EventArgs e)

        {

            int width = SystemInformation.MinWindowTrackSize.Width;

            //On Win7, it shows 132

            MessageBox.Show(width.ToString(), "MinWindowTrackSize.Width");

 

            Form newForm = new Form();

            newForm.Width = 100;

            //On Win7, it shows 132

            MessageBox.Show(newForm.Width.ToString(), "newForm.Width");

 

            newForm.MinimumSize = new Size(80, 300);

            //On Win7, it shows 132

            MessageBox.Show(newForm.Width.ToString(), "newForm.Width");

 

            newForm.MinimumSize = new Size(150, 300);

            //On Win7, it shows 150

            MessageBox.Show(newForm.Width.ToString(), "newForm.Width");

        }

你可能感兴趣的:(windows,object,button,WinForms)