2012-07-25 1 views
5

Nach einer gewissen Zeit suchen Sie nach dieser Funktion:C#: Eine Funktion, die Schriftarten automatisch zur Laufzeit an die Kontrollgröße anpasst?

Ich dachte, es wird nett sein, wenn mir jemand den besten Weg dazu geben könnte. Gibt es eine Funktion, die die Schriftgröße basierend auf der Größe eines beliebigen Fensterformats (Beschriftung/Schaltfläche) dynamisch anpassen kann?

Dies ist, was ich nach der Online-Recherche habe, leider geben diese Codes eine Menge Ausnahme während der Laufzeit, wenn die Steuerung neu sortiert.

public void textAdjustment() 
    { 
     try 
     { 
      while (this.label.Width < System.Windows.Forms.TextRenderer.MeasureText(this.label.Text, 
       new Font(this.label.Font.FontFamily, this.label.Font.Size, this.label.Font.Style)).Width) 
      { 
       this.label.Font = new Font(this.label.Font.FontFamily, this.label.Font.Size - 1.0f, this.label.Font.Style); 
      } 
      if (this.label.Width > System.Windows.Forms.TextRenderer.MeasureText(this.label.Text, new Font(this.label.Font.FontFamily, this.label.Font.Size, this.label.Font.Style)).Width) 
      { 
       this.label.Font = new Font(this.label.Font.FontFamily, this.label.Font.Size + 0.1f, this.tableLabel.Font.Style); 
      } 
      if (this.label.Height < System.Windows.Forms.TextRenderer.MeasureText(this.label.Text, new Font(this.label.Font.FontFamily, this.label.Font.Size, this.label.Font.Style)).Height) 
      { 
       this.label.Font = new Font(this.label.Font.FontFamily, this.label.Font.Size - 0.6f, this.label.Font.Style); 
      } 
     } 
     catch (Exception e) 
     { 
      this.label.Font = Control.DefaultFont; 
     } 
    } 

Ich glaube nicht, habe ich meinen Weg zur Bewältigung dieses Recht ist, weiß jemand eine Möglichkeit, die Schriftgröße Basis, auch wenn Erhöhung anpassen und Steuergröße in der Laufzeit verringern? Ich persönlich denke, dass dieser Beitrag ein sehr guter Beitrag für andere sein wird.

Antwort

3

Dies ist sehr lästige Art von Code, die richtige Größe der Schriftart ist nicht so gut mit der Größe des Steuerelements korreliert. Es ist auch nicht üblich, eine Benutzeroberfläche sollte bei jeder Fenstergröße lesbar und konsistent sein. Es ist ansonsten sehr unklar, welche Art von Ausnahmen Sie sehen. Offensichtliche Fehler sind, die AutoSize-Eigenschaft des Labels zu deaktivieren und das Label nicht groß genug zu machen. Einige Code zum Spielen, achten Sie darauf, dass es nur für ein Label geeignet ist. Drop ein auf dem Formular, bevor Sie diesen Code einfügen:

public partial class Form1 : Form { 
    public Form1() { 
     InitializeComponent(); 
     label1.AutoSize = false; 
     label1.Size = new Size(100, 60); 
     label1.Text = "Autosize this"; 
     label1.Anchor = AnchorStyles.Left | AnchorStyles.Right; 
     label1.Resize += new EventHandler(label1_Resize); 
    } 

    void label1_Resize(object sender, EventArgs e) { 
     using (var gr = label1.CreateGraphics()) { 
      Font font = label1.Font; 
      for (int size = (int)(label1.Height * 72/gr.DpiY); size >= 8; --size) { 
       font = new Font(label1.Font.FontFamily, size, label1.Font.Style); 
       if (TextRenderer.MeasureText(label1.Text, font).Width <= label1.ClientSize.Width) break; 
      } 
      label1.Font = font; 
     } 
    } 

    protected override void OnLoad(EventArgs e) { 
     label1_Resize(this, EventArgs.Empty); 
     base.OnLoad(e); 
    } 
} 

Es muss verbessert werden, die measureText() -Methode die Textformatflags, dass die Label-Steuerelement Anwendungen verwenden sollten. Aber das funktionierte gut genug, wie gepostet.

+0

TextRenderer gib mir immer Kopfschmerzen, diese Funktion ist meiner Meinung nach ein bisschen knifflig. –

Verwandte Themen