mercoledì 21 novembre 2007

Gestire l'allineamento del testo nei controlli ListBox con C# e VB.NET

Per risolvere il problema dell'allineamento (Sinistra, Giustificato, Destra) si può intercettare l'evento DrawItem del controllo di tipo ListBox e ridefinire graficamente la stringa.

Una enumerazione per la gestione del DataSource della ComboBox

enum Allineamento
{      
      
Giustificato,
        Sinistra,
        Destra
}
...
comboBox1.DataSource = Enum.GetValues(typeof(Allineamento));

Gestiamo il ridisegno delle stringhe  intercettando DrawItem

// intercettiamo l'evento DrawItem

void ListBox1DrawItem(object sender, DrawItemEventArgs e)
{
       Graphics g = e.Graphics;
       SolidBrush sBrush;
       string s;
       StringFormat sFormat = new StringFormat();
       // Scelta allineamento
       switch(comboBox1.SelectedValue.ToString())
       {
           case "Sinistra":
              sFormat.Alignment = StringAlignment.Near;
              break;
           case "Destra":
              sFormat.Alignment = StringAlignment.Far;
              break;
           default:
              sFormat.Alignment = StringAlignment.Center;
              break;
       }
       try
       {
             s = listBox1.Items[e.Index].ToString();
       }
       catch (Exception ex)
       {
             s = "";
             Trace.WriteLine(ex.Message + Environment.NewLine + ex.StackTrace);
       }
       // definizione oggetto di tipo SolidBrush che
       // utilizzeremo per disegnare la stringa
        sBrush = new SolidBrush(Color.White);
       g.FillRectangle(sBrush, e.Bounds);
       if (e.State == DrawItemState.Selected)
             g.FillRectangle(Brushes.LightBlue, e.Bounds);
        g.DrawString(s, listBox1.Font, Brushes.Black, (RectangleF) e.Bounds, sFormat);
        sBrush.Dispose();
}

Riferimenti
Esempio realizzato con C
Esempio realizzato con VB.NET

Nessun commento: