Приложение winforms, написанное на win7, выглядит по-другому на win xp. Зачем? - PullRequest
3 голосов
/ 20 марта 2011

Я написал простое приложение на winforms (.net 4.0) на win 7. Приложение выглядит так, как я хочу, но когда я попробовал его на windows xp, все выглядело иначе.

Я создал пример для демонстрации того, как он выглядит на win 7 и xp. Что я могу сделать, чтобы иметь одинаковый вид на обеих системах? Проблема не только в цвете фона и шрифта, но и в элементах управления. Здесь я показываю, как выглядит numericupdown, но с разметкой таблицы у меня тоже проблемы.

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 ]

10 голосов
/ 20 марта 2011
    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 точек на дюйм на вашем компьютере разработчика, 96 DPI (по умолчанию) на XP.На Win7 это устанавливается виджетом, который выглядит как линейка, Панель управления + Дисплей, «Задать нестандартный размер текста (DPI)».

Для свойства AutoScaleMode правильно установлено значение «Шрифт».Это гарантирует, что все элементы управления автоматически масштабируются в соответствии с размером шрифта.Что на больше на вашем компьютере с Win7 из-за более высокого значения DPI.Соответственно, форма и ее элементы управления сокращаются на машине XP.Проблема с элементом управления NumericUpDown заключается в том, что он немного глючит (более чем одним способом), он неправильно масштабирует глифы вверх / вниз.Они пропорционально слишком велики и не оставляют достаточно места для текстовой части.Простое увеличение его ширины решает проблему.

Автоматическое масштабирование довольно уродливо, редко бывает идеально на 100%.Лучшее, что можно сделать, это переключить вашу машину на 96 dpi.Очень распространенная обстановка, все еще сегодня.Масштабирование up почти всегда работает лучше, чем уменьшение.

2 голосов
/ 20 марта 2011

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).Не будет выглядеть точно так же, но будет ближе.

...