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

时间:2011-03-19 21:06:12

标签: winforms windows-7 windows-xp

我在win 7上用winforms(.net 4.0)编写了一个简单的应用程序。应用程序看起来我想要的但是当我在windows xp上尝试它时,一切看起来都不一样。

我创建了一个示例示例,以展示它在win 7和xp上的外观。 我可以做些什么来在两个系统上看到相同的外观? 问题不仅在于背景和字体颜色,还在于控件。在这里,我展示了数字版本的外观,但是对于表格布局我也有问题。

win 7 win xp

 private void InitializeComponent()
    {
        this.numericUpDown1 = new System.Windows.Forms.NumericUpDown();
        this.groupBox1 = new System.Windows.Forms.GroupBox();
        ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit();
        this.SuspendLayout();
        // 
        // numericUpDown1
        // 
        this.numericUpDown1.DecimalPlaces = 2;
        this.numericUpDown1.Increment = new decimal(new int[] {
        1,
        0,
        0,
        131072});
        this.numericUpDown1.Location = new System.Drawing.Point(21, 26);
        this.numericUpDown1.Maximum = new decimal(new int[] {
        1,
        0,
        0,
        0});
        this.numericUpDown1.Name = "numericUpDown1";
        this.numericUpDown1.Size = new System.Drawing.Size(54, 22);
        this.numericUpDown1.TabIndex = 0;
        // 
        // groupBox1
        // 
        this.groupBox1.Location = new System.Drawing.Point(21, 82);
        this.groupBox1.Name = "groupBox1";
        this.groupBox1.Size = new System.Drawing.Size(226, 99);
        this.groupBox1.TabIndex = 1;
        this.groupBox1.TabStop = false;
        this.groupBox1.Text = "groupBox1";
        // 
        // Form1
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.BackColor = System.Drawing.SystemColors.ActiveCaption;
        this.ClientSize = new System.Drawing.Size(407, 331);
        this.Controls.Add(this.groupBox1);
        this.Controls.Add(this.numericUpDown1);
        this.Name = "Form1";
        this.Text = "Form1";
        ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit();
        this.ResumeLayout(false);

    }

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

2 个答案:

答案 0 :(得分:10)

    this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    this.BackColor = System.Drawing.SystemColors.ActiveCaption;

这些是导致您麻烦的陈述。我首先要选择一个简单的,不要使形式的BackColor与标题颜色相同。如果要选择主题颜色,则只选择“控制”颜色。虽然你通常会把旧战舰变成灰色。选择中性柔和的色彩是最好的选择,但尊重用户的偏好永远不会让你陷入困境。

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

AutoScaleMode属性已正确设置为Font。这可确保自动缩放所有控件以适合字体大小。由于DPI设置较高,因此Win7机器上的较大。因此,表格及其控件在XP机器上缩小。 NumericUpDown控件的问题在于它有点错误(不止一种方式),它不能正确缩放上/下字形。它们按比例太大,没有为文本部分留出足够的空间。简单地使它更宽一点就解决了这个问题。

自动缩放相当丑陋,很少100%完美。最好的办法是将您的开发机器切换到96 dpi。一个非常常见的环境,至今仍然如此缩放 up 几乎总是比缩小效果更好。

答案 1 :(得分:2)

this.BackColor = System.Drawing.SystemColors.ActiveCaption;

有你的问题。颜色将取决于操作系统。 http://msdn.microsoft.com/en-us/library/system.drawing.systemcolors.activecaption.aspx

考虑设置明确的颜色值(例如System.Drawing.Color http://msdn.microsoft.com/en-us/library/system.drawing.color.aspx枚举之一)。看起来不一样,但会更接近。