lunedì 6 settembre 2021

C# .Net 5 colorare le paginette del controllo TabControl

Si riporta l'articolo scritto per il sito https://www.iprogrammatori.it/articoli/microsoft-net-framework/art_c-net-5-colorare-le-paginette-del-controllo-tabcontrol_1749.aspx 


In questo articolo vedremo come estendere il controllo TabControl con aspetti grafici insoliti, in particolare vedremo come tramite il linguaggio C# su un progetto di tipo “Windows Application” andremo ad applicare una colorazione alle singole paginette, il tutto come mostrato in figura 1. 


Figura 1 – Il controllo TabControl Con le due paginette colorate


Il tutto verrà realizzato con il linguaggio di programmazione C# versione del Framework .Net 5 quindi l’ultima e l’ambiente di sviluppo Visual Studio 2019 Community.



Creazione del progetto


Si crea un nuovo progetto di tipo App Windows, con la versione del Framework 5.0, che al momento è l’ultima tra quelle rilasciate.

Una volta creato il progetto, nella form aggiungiamo un controllo di tipo “TabControl” con due paginette, il tutto come mostrato in figura 2.



Figura 2 – Il controllo TabControl con due paginette


Terminata la creazione della form, non ci resta che scrivere il codice per impostare il colore alle singole paginette.


Stesura del codice

Facciamo doppio click sulla form, in modo che passiamo in visualizzazione codice nell’evento load della form.

In alto sopra ad ogni dichiarazione, prima del costruttore dobbiamo creare un oggetto di tipo “Dictionary” in modo che gestiamo la colorazione delle singole paginette, in questo caso sono due.

Qui di seguito il frammento di codice di tale dichiarazioni.

C#

private Dictionary<TabPage, Color> PaginetteColorate = new Dictionary<TabPage, Color>();

Ora occorre creare l’evento per il ridisegno della pagina con il quale verrà impostato il colore della paginetta.

L’evento che riguarda tale scenario è “DrawItem” che ridisegna le paginette del controllo.

Qui di seguito il frammento di codice delle suddette operazioni.


C#

private void tabControl1_DrawItem(object sender, DrawItemEventArgs e)

        {

 

            using (Brush br = new SolidBrush(PaginetteColorate[tabControl1.TabPages[e.Index]]))

 

            {

 

                e.Graphics.FillRectangle(br, e.Bounds);

 

                SizeF sz = e.Graphics.MeasureString(tabControl1.TabPages[e.Index].Text, e.Font);

 

                e.Graphics.DrawString(tabControl1.TabPages[e.Index].Text, e.Font, Brushes.Black, e.Bounds.Left + (e.Bounds.Width - sz.Width) / 2, e.Bounds.Top + (e.Bounds.Height - sz.Height) / 2 + 1);

 

 

 

                Rectangle rect = e.Bounds;

 

                rect.Offset(0, 1);

 

                rect.Inflate(0, -1);

 

                e.Graphics.DrawRectangle(Pens.DarkGray, rect);

 

                e.DrawFocusRectangle();

 

            }

 

        }



Questo evento va collegato all’evento DrawItem del controllo TabControl1, per far questo passiamo in visualizzazione grafica, e facciamo click sul controllo TabControl1, nella finestra delle proprietà, facciamo click nella sezione eventi, e nella voce DrawItem, selezioniamo l’evento appena creato.

Ora ritorniamo in visualizzazione codice, tramite il doppio click sulla form, in questo modo si passa all’evento load della form con il quale scrivere il codice per impostare la colorazione alle paginette.

In questo evento andiamo ad impostare nelle singole paginette un determinato colore.

Qui di seguito il frammento di codice delle suddette operazioni.


C#

private void Form1_Load(object sender, EventArgs e)

        {

            PaginetteColorate.Add(tabControl1.TabPages[0], Color.Green);

 

            PaginetteColorate.Add(tabControl1.TabPages[1], Color.AliceBlue);

 

            tabControl1.DrawMode = TabDrawMode.OwnerDrawFixed;

 

        }




Conclusioni

Ora non ci resta che testare il nostro programma per verificare il corretto funzionamento. Come si è visto in questo articolo, tramite poche righe di codice ed intervenendo sugli eventi del controllo si possono implementare ed estendere i controlli di tipo “Windows Application” in questo caso del controllo TabControl. Può tornare utile in quei contesti in cui occorre fornire delle personalizzazioni particolari.

Il codice presente in questo articolo fa riferimento all’ultima versione del Framework, ma è possibile utilizzarlo anche con le versioni precedenti.

Nessun commento: