2011-06-23 2 views
0

C# WinForms: Imaginez qu'il y ait un tas de contrôles à l'intérieur des panneaux rouge et jaune. En fait, ils n'ont pas besoin d'être des panneaux. Tout ce que vous suggérez est Ok. Fonctionnalité requise: lorsque le redimensionnement de la langue anglaise est OK, car le formulaire ressemble à ce que j'avais conçu dans le concepteur. lorsque la langue change, le problème apparaît car l'étiquette reçoit un texte plus long en mode traduit et ne correspond tout simplement pas à la couleur jaune. Donc: (1) Je veux une idée de conception d'interface utilisateur qui quand l'étiquette a besoin de plus de place, redimensionne automatiquement et la zone jaune redimensionne et pousse la zone rouge vers la droite et aussi le formulaire redimensionnera pour montrer tout. 2) Je veux que la zone rouge se développe si je redimensionne le formulaire, donc je peux le faire en ancrant la zone rouge à droite, bien ... MAIS je ne veux pas que la zone jaune soit redimensionnée si je redimensionne le formulaire. Je veux seulement le redimensionner quand le contenu à l'intérieur a besoin de plus d'espace. 3) Je peux me tromper soit-je utilisé un TableLayout avec deux colonnes pour les zones rouges et jaunes et mettre les colonnes en mode AutoSize mais il n'a pas résolu le problème ....Redimensionnement du formulaire lorsque la langue change

que suggérez-vous?

enter image description here

+0

Utilisez plutôt WPF. ;-) Il peut gérer une grande partie de cela pour vous. –

+0

WPF n'est pas un choix pour moi. Je dois utiliser Win32 Forms. – Bohn

+0

Un TableLayoutPanel devrait fonctionner. Peut-être que vous l'avez mal utilisé. –

Répondre

1

La meilleure façon de faire est de faire une classe qui hérite de la System.Forms.Controls.Button ou une catégorie d'étiquette. Remplacez l'événement TextChanged, puis dans votre fonction Paint, utilisez MeasureFont pour mesurer la taille du texte et modifier la taille du bouton de façon appropriée. Donc, quelque chose comme ceci:

public class MyButton : Button 
{ 
    protected override void OnPaint(PaintEventArgs pe) 
    { 
     Graphics g = pe.Graphics; 

     SizeF stringSize = g.MeasureFont(this.Text, this.Font); 

     this.Resize(SizeF.Width + 10, SizeF.Height + 10); 
    } 
} 

Quelque chose dans ce sens. Je n'ai pas testé ça.

Questions connexes