2016-07-02 32 views
4

Ich habe eine StatusStrip angedockt an der Unterseite eines C# -Formulars, es enthält eine Beschriftung, der darin enthaltene Text fein, außer wenn es längere Textlänge gibt, dann wird es nicht angezeigt alles, und ich muss die Form erweitern und dann plötzlich erscheint es. Ist es möglich, sie in das Formular unten zu zeigen:StatusStrip-Label nicht sichtbar, wenn Text zu lang

This is a very long tex... 

Damit der Benutzer weiß, dass die App etwas zeigt und dann kann er es sich verbreitern, weil, wenn es überhaupt nicht sichtbar ist, ist es nicht an, alles zum Benutzer.

+2

Messen Sie einfach die Textbreite und trimmen Sie sie an der Breite der Statusbeschriftungen, dann SubString() + "..."; –

+0

Welche Art von VS verwenden Sie? Ich benutze VS2015 Update 3, .NET 4.0, Win10 und es ist in Ordnung. Der Text wird abgeschnitten, wenn die Breite des Formulars kleiner als die Breite des Textes ist. "... es wird überhaupt nicht angezeigt" passiert nicht auf meinem Formular. –

+0

@ JeremyThompson Das ist machbar, aber wenn der Benutzer das Formular erweitert, muss ich es erneut aktualisieren, sonst wird unvollständiger Text angezeigt. – Ahmed

Antwort

6

Sie können einen benutzerdefinierten Renderer erstellen basierend auf ToolStripProfessionalRenderer und OnRenderItemText Methode außer Kraft setzen und Text mit Auslassungszeichen zeichnen:

public class CustomRenderer : ToolStripProfessionalRenderer 
{ 
    protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e) 
    { 
     if (e.Item is ToolStripStatusLabel) 
      TextRenderer.DrawText(e.Graphics, e.Text, e.TextFont, 
       e.TextRectangle, e.TextColor, Color.Transparent, 
       e.TextFormat | TextFormatFlags.EndEllipsis); 
     else 
      base.OnRenderItemText(e); 
    } 
} 

Dann ist es genug Renderer Ihrer StatusStrip Ihrem benutzerdefinierten Renderer zu setzen:

this.statusStrip1.Renderer = new CustomRenderer(); 

Im folgenden Beispiel sehen Sie das Verhalten eines ToolStripStatusLabel, dessen Spring -Eigenschaft auf true und dessenfestgelegt istverwendet CustomRenderer:

enter image description here

+0

Ich benutze VS2015.3, .NET 4.0 und Win10. Das ist das Standardverhalten von label in statusStrip. Ich muss es nicht verlängern. –

+0

@x ... Das Beispiel wird mit 'VS 2013.4' und' .NET 4.5' auf 'Windows 8.1' erstellt. Es scheint, wir brauchen eine Lösung. –

+0

Danke @RezaAghaei Ich bin auf VS 2010 und .Net 3.5 Windows 8.1 – Ahmed

0

auf Visual Studio 2017, die akzeptierte Antwort nicht für mich arbeiten. Also hier ist eine andere einfache Lösung. Set LayoutStyle Eigenschaft von StatusStrip zu Flow. dh:

statusStrip1.LayoutStyle= LayoutStyle.Flow; 

Und Set

`statusStrip1.AutoSize= false;` 
+0

Wahrscheinlich haben Sie einen Fehler bei der Anwendung der Lösung gemacht. Stellen Sie sicher, dass Sie ein Status-Trip-Label hinzugefügt haben. Stellen Sie außerdem sicher, dass Sie die Eigenschaft spring des Labels auf true gesetzt haben und Sie den Renderer verwenden, den ich als Antwort angegeben habe. –

2

Wenn Sie

ToolStripStatusLabel.Spring = True; 

gesetzt, dann werden Sie nicht die "..." erhalten, aber der Text wird auch angezeigt, wenn die zur Verfügung stehende Platz ist nicht ausreichend.