2010-04-15 11 views
16

Ho uno StatusStrip con una singola etichetta ToolStripStatus, Spring = true e un colore di sfondo per le notifiche.Come recuperare lo spazio dal "Grip"

Il problema è che c'è un brutto quadrato grigio sul lato destro della barra di stato. Dopo aver giocato per un po ', ho capito che questo è il grip di dimensionamento (ho avuto è impostato su SizingGrip = false, GripStyle = Hidden). Eppure, anche se nascosto, si aggira ancora lo spazio. Non riesco a ottenere alcun contenuto sulla barra di stato per estenderlo completamente a destra.

Come lavoreresti intorno a questo? Nota Non posso semplicemente impostare il backcolor di StatusStrip perché l'etichetta di stato cambia colore e presenta alcuni effetti di dissolvenza.

risposta

26

La proprietà è StatusStrip.Padding borked, restituisce il valore errato per Padding.Right se il grip di ridimensionamento è disattivato. È possibile risolvere il problema nel costruttore di moduli, come:

public Form1() { 
    InitializeComponent(); 
    statusStrip1.Padding = new Padding(statusStrip1.Padding.Left, 
    statusStrip1.Padding.Top, statusStrip1.Padding.Left, statusStrip1.Padding.Bottom); 
} 

Utilizzare la proprietà Left per specificare Right è la correzione. Non preoccuparti di inviare questo bug a Connect, non lo risolvono.

1

Dai un'occhiata allo this blog entry on MSDN. La domanda riguardava la modifica manuale delle dimensioni del grip di ridimensionamento e penso che l'utilizzo di ToolStrip Renderer come suggerito potrebbe funzionare anche per te.

Il problema che ho finora è che rimuove il colore di sfondo su un'etichetta di stato in StatusStrip, quindi non è ancora una soluzione, ma è un inizio.

public MyForm() 
    { 
     InitializeComponent(); 
     statusStrip1.Renderer = new MyRenderer(); 
    } 

    private class MyRenderer : ToolStripProfessionalRenderer 
    { 
     protected override void OnRenderStatusStripSizingGrip(ToolStripRenderEventArgs e) 
     { 
      // don't draw at all 
     } 
    } 
0

Ho avuto il seguente problema: quando ho impostato tsslSeparator.Spring = true, l'etichetta destra è scomparsa immediatamente dopo che tsslSeparator ha perso lo stato attivo. Il problema appariva quando il grip di ridimensionamento era abilitato. Quando era disabilitato, tutto funzionava bene. La soluzione era quella di impostare il margine destro per l'etichetta giusta per qualcosa di diverso da 0.

tsslLogging.Margin = new Padding(0, 3, 2, 2); // this is necessary for right alignment of status bar label 

Spero che questo aiuti qualcuno.

0

Se Microsoft non è interessante a risolverlo, sembra che una correzione adeguata deve gestire tutti gli orientamenti, e idealmente risolvere tutte le strisce di stato (vedi la mia risposta a Get All Children per la definizione di GetAllChildren)

public static StatusStrip FixPadding(this StatusStrip ss) { 
     if (!ss.SizingGrip) { 
      var fixpad = ss.Padding; 

      if (ss.Orientation == Orientation.Horizontal) { 
       if (ss.RightToLeft == RightToLeft.No) 
        fixpad.Right = fixpad.Left; 
       else 
        fixpad.Left = fixpad.Right; 
      } 
      else 
       fixpad.Bottom = fixpad.Top; 

      ss.Padding = fixpad; 
     } 

     return ss; 
    } 

    public static void FixStatusStripPadding(this Form f) { 
     foreach (var ss in f.GetAllChildren().OfType<StatusStrip>()) 
      ss.FixPadding(); 
    } 
Problemi correlati