3 votes

les applications winforms écrites en win7 ont un aspect différent sur win xp. pourquoi ?

J'ai écrit une application simple en winforms (.net 4.0) sur win 7. L'application ressemble à ce que je veux mais quand je l'ai essayé sur Windows xp, tout est différent.

J'ai créé un exemple pour montrer comment cela se présente sur win 7 et xp. Que puis-je faire pour avoir le même aspect sur les deux systèmes ? Le problème ne concerne pas seulement la couleur de l'arrière-plan et de la police, mais aussi les contrôles. Je montre ici comment se présente le numericupdown mais j'ai aussi des problèmes avec la mise en page des tableaux.

win 7win 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);

    }

Je n'ai pas modifié les thèmes de couleur de xp. J'ai le même résultat sur deux ordinateurs différents avec win xp.

10voto

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

Ce sont les déclarations qui causent votre problème. Je vais commencer par la plus facile : ne faites pas en sorte que la couleur de fond du formulaire soit la même que celle de la légende. Si vous voulez choisir une couleur de thème, choisissez uniquement la couleur "Contrôle". Cependant, vous obtiendrez généralement le vieux gris cuirassé. Il est préférable de choisir une couleur pastel neutre, mais respecter les préférences de l'utilisateur ne vous causera jamais de problèmes.

La propriété AutoScaleDimensions est générée automatiquement, en fonction du paramètre DPI de l'adaptateur vidéo. Ce qui est différent de la machine XP. Vous avez 120 points par pouce sur votre machine de développement, 96 DPI (la valeur par défaut) sur XP. Sur Win7, ce paramètre est défini par le widget qui ressemble à une règle, Panneau de configuration + Affichage, "Définir la taille du texte personnalisé (DPI)".

La propriété AutoScaleMode est correctement définie sur Font. Cela garantit que tous les contrôles sont automatiquement mis à l'échelle pour s'adapter à la taille de la police. Ce qui est plus grand sur votre machine Win7 en raison du paramètre DPI plus élevé. En conséquence, le formulaire et ses contrôles rétrécissent sur la machine XP. Le problème avec le contrôle NumericUpDown est qu'il est un peu bogué (à plus d'un titre), il ne met pas à l'échelle les glyphes haut/bas correctement. Ils sont proportionnellement trop grands, ne laissant pas assez de place pour la partie texte. Il suffit de le rendre un peu plus large pour résoudre le problème.

La mise à l'échelle automatique est assez moche, elle est rarement parfaite à 100%. La meilleure chose à faire est de passer votre machine de développement à 96 dpi. Un réglage très courant, encore aujourd'hui. Mise à l'échelle en haut fonctionne presque toujours mieux que de réduire l'échelle.

2voto

Bleaourgh Points 156

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

C'est là votre problème. La couleur va dépendre du système d'exploitation. http://msdn.microsoft.com/en-us/library/system.drawing.systemcolors.activecaption.aspx

Envisagez de définir une valeur de couleur explicite (par exemple, l'un des éléments suivants System.Drawing.Color http://msdn.microsoft.com/en-us/library/system.drawing.color.aspx ) à la place. Ce ne sera pas exactement la même chose, mais ce sera plus proche.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X