Visual C#2010 Express:Win7和WinXP上的相同表单但大小不同

时间:2010-10-27 06:57:19

标签: c# windows forms size

我在Win7和XP上都使用Visual C#Express 2010。

我有一个Windows窗体应用程序项目,并且有SevenXPForm(继承Form)。

我在Win7上的Visual C#Express 2010中创建了它,在“属性”面板中,我设置了

.MinimumSize = 300, 300
.Size = 300, 300

TabControl位于Form的中间:

alt text

但是,当我保存项目/解决方案,并在WinXP上的Visual C#Express 2010中打开时,大小更改为:

.MinimumSize = 300, 279
.Size = 300, 279

TabControl不再是Form的中间部分了:

alt text

当我再次在Win7上打开它时,它会回来。

这让我很难过,因为我的应用程序预计将在XP和Seven(和Vista)上运行。

我是否必须设置一些内容以使其在Win7和WinXP上的行为完全相同?

彼得

5 个答案:

答案 0 :(得分:1)

您遇到的问题是窗体周围的边框因Windows XP和Windows 7而异。这会导致窗口大小不同。 .NET试图解决这个问题的方法是,不是像在属性对话框中看到的那样保存窗口的大小,而是实际保存了ClientSize,这是窗口的内部大小。您在属性对话框中看到的是转换为包含外边框的大小。这意味着当您在具有较小边框的Windows XP上打开项目时,.NET会尝试进行调整。

您看到的问题似乎是转化中的问题。它似乎考虑到较小的垂直尺寸,但不考虑较小的水平尺寸。

关于你的工作。针对特定问题/解决方案的不同方法不是自动调整选项卡控件的大小,而是让.NET为您执行此操作。如果您将表单的Padding设置为例如10, 10, 10, 10并将标签控件的Dock设置为Fill,您将获得相同的效果。

我在这里看不到一般的解决方案,因为如果这是.NET本身所做的转换中的一个问题,那就变得非常困难了。

答案 1 :(得分:0)

经过Google搜索后,我仍然无法找到解决方案。但我确实有一个解决方法来部分解决我的问题:

private void SevenXPForm_Load(object sender, EventArgs e)
{
    tabControl1.Width = this.ClientSize.Width - tabControl1.Left * 2;
    tabControl1.Height = this.ClientSize.Height - tabControl1.Top * 2;
}

这只是一种解决方法,我认为应该有更好的方法。

(如果表单上有很多控件怎么办?当然,我们可以将一个面板作为表单的唯一子控件,然后将所有其他控件添加到此面板中,这样可行,但是它太繁琐了)

答案 2 :(得分:0)

更强大的解决方法是将整个表单的内容放在面板中,并将对接设置为填充,然后按照您在该面板中的其他方式排列所有内容。在这个问题得到修复之前 - 假设它是 - 我建议你为你创建的每一个表格做这件事。

答案 3 :(得分:0)

请查看此链接:

http://msdn.microsoft.com/en-us/library/ms229605.aspx

-

快速查看

自动缩放功能可以在具有特定显示分辨率或系统字体的一台计算机上设计的表单及其控件在具有不同显示分辨率或系统字体的另一台计算机上正确显示。它确保表单及其控件将智能地调整大小,以与用户和其他开发人员的计算机上的本机窗口和其他应用程序保持一致。 .NET Framework支持自动扩展和可视样式,使.NET Framework应用程序与每个用户计算机上的本机Windows应用程序相比,可以保持一致的外观。

答案 4 :(得分:0)

这是一个老问题,但它是在谷歌,所以我有一个答案,这可能对其他人有用,所以我会分享它(对不起我的英语)。

1)绘制一个面板1 2) Form1_Load 部分中的panel1.Dock = DockStyle.Fill;
3)现在你可以使用panel1的宽度和高度来获得Form1的实际宽度和高度,无论你使用哪种操作系统(Win XP或7),无论形式是边框样式。