用win7编写的winforms应用程序在win xp上看起来不同。为什么?

用win7编写的winforms应用程序在win xp上看起来不同。为什么?,winforms,windows-7,windows-xp,Winforms,Windows 7,Windows Xp,我在Win7上用winforms(.net 4.0)编写了一个简单的应用程序。这个应用程序看起来像我想要的,但当我在WindowsXP上试用时,一切看起来都不一样了 我创建了一个示例来展示它在Win7和xp上的外观。 如何使两个系统具有相同的外观? 问题不仅在于背景和字体颜色,还在于控件。这里我展示了numericupdown的外观,但对于表布局,我也有问题 我没有修改xp颜色主题。 我用win xp在两台不同的计算机上得到了相同的结果。this.BackColor=System.Drawi

我在Win7上用winforms(.net 4.0)编写了一个简单的应用程序。这个应用程序看起来像我想要的,但当我在WindowsXP上试用时,一切看起来都不一样了

我创建了一个示例来展示它在Win7和xp上的外观。 如何使两个系统具有相同的外观? 问题不仅在于背景和字体颜色,还在于控件。这里我展示了numericupdown的外观,但对于表布局,我也有问题

我没有修改xp颜色主题。
我用win xp在两台不同的计算机上得到了相同的结果。

this.BackColor=System.Drawing.SystemColors.ActiveCaption

这是你的问题。颜色将取决于操作系统

考虑设置显式颜色值(例如,
System.Drawing.color
枚举之一)。看起来不完全一样,但会更近

    this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    this.BackColor = System.Drawing.SystemColors.ActiveCaption;
这些是给你带来麻烦的陈述。我先挑一个简单的,不要使表单的背景色与标题颜色相同。如果要选择主题颜色,请仅选择“控制”颜色。尽管你通常会得到灰色的旧战舰。选择中性的粉彩颜色是你最好的选择,但尊重用户的偏好永远不会让你陷入麻烦

AutoScaleDimensions属性是根据视频适配器的DPI设置自动生成的。这与XP机器不同。在你的开发机器上每英寸有120个点,在XP上是96 DPI(默认值)。在Win7上,这是由看起来像尺子的小部件、控制面板+显示器“设置自定义文本大小(DPI)”设置的

AutoScaleMode属性已正确设置为字体。这确保所有控件都自动缩放以适应字体大小。由于DPI设置较高,Win7计算机上的DPI更大。因此,窗体及其控件在XP机器上会收缩。NumericUpDown控件的问题在于它有点问题(不止一种方式),它不能正确地缩放向上/向下图示符。它们按比例太大,没有为文本部分留出足够的空间。简单地把它扩大一点就可以解决问题


自动缩放相当难看,很少100%完美。最好的办法是将您的开发机器切换到96 dpi。一个非常普遍的环境,直到今天。放大几乎总是比缩小效果更好。

屏幕截图对于调试代码来说很糟糕。复制并粘贴InitializeComponent()的代码。并记录是否在XP上修改了Windows主题颜色。
    this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    this.BackColor = System.Drawing.SystemColors.ActiveCaption;