Winforms:Form的最小宽度限制
2010-03-13 18:38
281 查看
一、问题描述
我们给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.MinimumSize比MinWindowTrackSize还要小,则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");
}
我们给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.MinimumSize比MinWindowTrackSize还要小,则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");
}
相关文章推荐
- 《c程序设计语言》读书笔记-3.6-数字转字符串最小宽度限制
- 《c程序设计语言》读书笔记-3.6-数字转字符串最小宽度限制
- border最小宽度限制1px
- 【框架MFC】限制单文档和多文档窗口范围最小值(设置窗口宽度和高度的下限)
- [转] css自适应客户端宽度,有最小宽度限制 (兼容IE6+、Firefox2.0)
- MFC,调整窗口大小限制大小,设置窗口的最大|最小宽度与高度
- 最小宽度限制CSS定义
- C#中 form窗体的宽度和高度最大值限制
- MFC 实现对显示的界面(最小宽度和最小高度的限制)
- DIV+CSS兼容解决DIV最大宽度和最小宽度问题
- plupload 如何控制最小宽度和文件类型及跨域
- 使用large 限定符 最小宽度限定符
- 设置网页自适应最大最小宽度,超过则隐藏
- (hdu step 4.2.4)A strange lift(求从起点到终点的最小步数,限制条件是:在一维的情况下)
- 简单下拉菜单(限制宽度)
- C#鼠标钩子 带你走出Form的区域限制
- 让IE6支持min-width最小宽度
- POJ 1639 有度限制的最小生成树
- bit-map再显身手:test.txt中有42亿个无符号整数, 求不存在于test.txt中的最小无符号整数。限制: 可用内存为600MB.
- 3个div必须并排显示,在不限制宽度得情况下 dispay:flex