Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual C#2010 Express:在Win7和WinXP上形式相同但大小不同_C#_Windows_Forms_Size - Fatal编程技术网

Visual C#2010 Express:在Win7和WinXP上形式相同但大小不同

Visual C#2010 Express:在Win7和WinXP上形式相同但大小不同,c#,windows,forms,size,C#,Windows,Forms,Size,我在Win7和XP上都使用Visual C#Express 2010 我有一个Windows窗体应用程序项目,有七个XpForm(继承窗体) 我在Win7上的Visual C#Express 2010中创建了它,并在“属性”面板中设置 .MinimumSize = 300, 300 .Size = 300, 300 和一个表控件处于窗体的中间: 但是,当我保存项目/解决方案并在WinXP上的Visual C#Express 2010中打开时,大小更改为: .MinimumSize = 300

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

我有一个Windows窗体应用程序项目,有七个XpForm(继承窗体)

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

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

和一个表控件处于窗体的中间:

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

.MinimumSize = 300, 279
.Size = 300, 279
TabControl不再是表单的中间部分:

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

这一直困扰着我,因为我的应用程序预计将在XP和Seven(以及Vista)上运行

我是否必须设置一些东西,使其在Win7和WinXP上的行为完全相同


彼得

在谷歌上搜索了很多之后,我仍然找不到解决办法。但我确实有一句话可以部分解决我的问题:

private void SevenXPForm_Load(object sender, EventArgs e)
{
    tabControl1.Width = this.ClientSize.Width - tabControl1.Left * 2;
    tabControl1.Height = this.ClientSize.Height - tabControl1.Top * 2;
}
这只是一个解决办法,我认为应该有更好的办法


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

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

看起来您看到的问题是转换过程中的问题。它似乎考虑了较小的垂直尺寸,但未考虑较小的水平尺寸

关于你周围的工作。解决特定问题/解决方案的另一种方法不是自动调整选项卡控件的大小,而是让.NET为您这样做。如果将表单的
填充设置为例如
10、10、10、10
,并将选项卡控件的
Dock
设置为
Fill
,则会获得相同的效果


不过,我在这里看不到通用的解决方案,因为如果这是.NET本身在转换过程中遇到的问题,那么这将变得非常困难。

一个更可靠的解决方法是将整个表单的内容放在一个面板中,并将停靠设置为填充,然后像在该面板中那样排列所有内容。在这个问题得到解决之前——假设是这样的话——我建议您在创建每个表单时都这样做。

请查看此链接:

--

快速查看


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

这是一个老问题,但它在Google中,因此我有一个答案,可能对其他人有用,因此我将与大家分享(对不起我的英语)

1) 绘制一个面板1
2)
panel1.Dock=DockStyle.Fill
表单1\u Load部分

3) 现在,您可以使用panel1 width和height来获得Form1的实际宽度和高度,无论您使用的是哪种操作系统(Win XP或7),也不管窗体边框样式。

您好,谢谢您的回复。我确实在工作,但是如果表单上有几个控件,我认为我们需要将它们分组在一个面板中。我的朋友建议我做这个表单。比表单大一点。最小值,它会有副作用。不管怎样,我会把你的答案记下来。嘿,彼得。你有没有找到解决办法?我有一个标签打印应用程序,它基本上在OnPaint事件期间绘制所有的
label
控件。在Windows7(我的开发PC)中,一切都非常棒。当我转到工厂里的XP机器上时,我有一组
标签
控件,它们的位置离我们很远。