Principale utente con più risposte
colore tabpage

Domanda
-
Risposte
-
Eccolo:
private void DrawTabCaption(Graphics g, string caption, int tabIndex, Rectangle rect) { var font = this.tabControl1.Font; if (tabIndex == 0) { // Prima tab g.FillRectangle(Brushes.Red, rect); // Sfondo rosso g.DrawString(caption, font, Brushes.White, rect.X + 1, (rect.Height / 2) - 5); // Testo bianco } else if (tabIndex == 1) { // Seconda tab g.FillRectangle(Brushes.Blue, rect); // Sfondo blu g.DrawString(caption, font, Brushes.Yellow, rect.X + 1, (rect.Height / 2) - 5); // Testo giallo } else { // Per tutte le altre tab g.FillRectangle(Brushes.White, rect); // Sfondo bianco g.DrawString(caption, font, Brushes.Green, rect.X + 1, (rect.Height / 2) - 5); // Testo verde } }
Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom- Proposto come risposta Irina Turcu mercoledì 14 dicembre 2011 16:12
- Contrassegnato come risposta 82_marco giovedì 15 dicembre 2011 22:46
Tutte le risposte
-
ciao
stai usando windowsforms?
asp.net?
wpf?
Antonio Esposito
MCT, MCPD, MCTS, MCP
http://dotnetlombardia.org -
-
ciao
se non erro, windows forms non ha proprietà per definire quel colore....
a differenza di wpf che usa sempre dei template modificabili o alterabili da stili.....
Antonio Esposito
MCT, MCPD, MCTS, MCP
http://dotnetlombardia.org -
-
-
Ciao!
Se vuoi cambiare il colore della Tab, devi gestire l'evento DrawItem: http://msdn.microsoft.com/en-us/library/system.windows.forms.tabcontrol.drawitem.aspx.
Se può servirti, puoi anche dare un'occhiata a questo post: http://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/2c6ea859-7c46-4ce8-9f49-35eded645961/.
Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom- Proposto come risposta Irina Turcu mercoledì 14 dicembre 2011 16:11
-
Ciao
Ho visto gli esempi, penso sia quello che mi serve pero' se provo gli esempi mi da errore.
sulle proprieta' dell tabcontrol metto DrawMode su OwnerDraw Fixed e poi gestisco l'evento DrawItem ma non riesco a fare funzionare l'esempio.
qualcuno ci e' riuscito?
-
Ciao!
Con questo codice ho ottenuto l'effetto desiderato:
public Form1() { InitializeComponent(); tabControl1.DrawMode = TabDrawMode.OwnerDrawFixed; } private void tabControl1_DrawItem(object sender, DrawItemEventArgs e) { using (var g = e.Graphics) { for (int i = 0; i < tabControl1.TabCount; i++) this.DrawTabCaption(g, tabControl1.TabPages[i].Text, tabControl1.GetTabRect(i)); } } private void DrawTabCaption(Graphics g, string caption, Rectangle rect) { var font = this.tabControl1.Font; g.FillRectangle(Brushes.Red, rect); // Sfondo rosso g.DrawString(caption, font, Brushes.White, rect.X + 1, (rect.Height / 2) - 5); // Testo bianco }
Tramite il metodo DrawTabCaption, ogni tab viene disegnata con sfondo rosso e testo bianco.
Fammi sapere se così ti funziona correttamente.
Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom- Modificato Marco MinervaMVP, Moderator lunedì 12 dicembre 2011 01:45
-
Si funziona perfettamente .-)
e se volessi un colore per ogni tab?
L' uso che ne dovrei fare e' questo: a seguito di determinate condizioni durante il funzionamento del programma il colore delle tab dovrebbe cambiare, alcune addirittura lampeggiare.L'evento drawitem viene ripetuto ad ogni ciclo di programma o devo procedere in un altro modo?
- Modificato 82_marco lunedì 12 dicembre 2011 20:45
-
Se vuoi cambiare il colore per ogni tab, ti basta modificare il metodo DrawTabCaption, dove si impostano colore di sfondo e del testo (come indicato dai commenti). Ad esempio, potresti passare al metodo anche l'indice della tab, e quindi assegnare ad ognuna un colore diverso.
Se vuoi forzare l'invocazione dell'evento DrawItem, puoi invocare il metodo Refresh del TabControl.
Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom -
-
Lo puoi passare al metodo DrawTabCaption, ad esempio così:
Nel ciclo for dell'evento tabControl1_DrawItem, quando richiami tale metodo passi anche la variabile i, che già usi per ciclare su tutte le tab.private void DrawTabCaption(Graphics g, string caption, int tabIndex, Rectangle rect) { var font = this.tabControl1.Font; g.FillRectangle(Brushes.Red, rect); // Sfondo rosso g.DrawString(caption, font, Brushes.White, rect.X + 1, (rect.Height / 2) - 5); // Testo bianco }
Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom -
-
Se stai utilizzando la nuova versione del metodo DrawTabCaption che ti ho passato, devi modificare di consiguenza l'evento tabControl1_DrawItem, facendo in modo che, quando dentro il ciclo for richiami il metodo DrawTabCaption, passi ad esso anche il valore di i. Ovvero:
private void tabControl1_DrawItem(object sender, DrawItemEventArgs e) { using (var g = e.Graphics) { for (int i = 0; i < tabControl1.TabCount; i++) this.DrawTabCaption(g, tabControl1.TabPages[i].Text, i, tabControl1.GetTabRect(i)); } }
Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom -
public partial class Form1 : Form { public Form1() { InitializeComponent(); tabControl1.DrawMode = TabDrawMode.OwnerDrawFixed; } private void tabControl1_DrawItem(object sender, DrawItemEventArgs e) { using (var g = e.Graphics) { for (int i = 0; i < tabControl1.TabCount; i++) this.DrawTabCaption(g, tabControl1.TabPages[i].Text, i, tabControl1.GetTabRect(i)); } } private void DrawTabCaption(Graphics g, string caption, int tabIndex, Rectangle rect) { var font = this.tabControl1.Font; g.FillRectangle(Brushes.Red, rect); // Sfondo rosso g.DrawString(caption, font, Brushes.White, rect.X + 1, (rect.Height / 2) - 5); // Testo bianco } }
Ho fatto cosi ma il colore cambia su tutte le tab -
Certo... Io ti ho solo scritto lo scheletro dell'algoritmo, ma tu che devi modificare il metodo DrawTabCaption per impostare colori diversi per le tab in base al valore del parametro i :-)
Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom -
-
Eccolo:
private void DrawTabCaption(Graphics g, string caption, int tabIndex, Rectangle rect) { var font = this.tabControl1.Font; if (tabIndex == 0) { // Prima tab g.FillRectangle(Brushes.Red, rect); // Sfondo rosso g.DrawString(caption, font, Brushes.White, rect.X + 1, (rect.Height / 2) - 5); // Testo bianco } else if (tabIndex == 1) { // Seconda tab g.FillRectangle(Brushes.Blue, rect); // Sfondo blu g.DrawString(caption, font, Brushes.Yellow, rect.X + 1, (rect.Height / 2) - 5); // Testo giallo } else { // Per tutte le altre tab g.FillRectangle(Brushes.White, rect); // Sfondo bianco g.DrawString(caption, font, Brushes.Green, rect.X + 1, (rect.Height / 2) - 5); // Testo verde } }
Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom- Proposto come risposta Irina Turcu mercoledì 14 dicembre 2011 16:12
- Contrassegnato come risposta 82_marco giovedì 15 dicembre 2011 22:46
-
-
Basta che richiami il metodo Refresh del TabControl: questa invocazione scatenerà a sua volta l'invocazione del metodo DrawItem, che forzerà il ridisegno delle tab tramite il solito metodo DrawTabCaption. Ti basta inserire all'interno di quest'ultimo la logica per utilizzare colori diversi sulle tab: ad esempio, potresti fare in modo che la prima tab abbia sfondo rosso se una certa variabile del tuo programma vale 0, verde se vale 1, blu in tutti gli altri casi (giusto per farti un esempio).
Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom -
-
-
-
-
-
Questo non lo so... Dipende dalla tua applicazione, devi essere tu a decidere in quale momento vuoi cambiare il colore delle etichette delle tab: in quel momento, devi invocare il metodo Refresh, che scatenerà il ridisegno del controllo, ad esempio utilizzando i nuovi colori che avrai impostato.
Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom -
-
Sì, lo devi invocare il quel punto. Il comando, supponendo che il tuo controllo si chiami TabControl1, è TabControl1.Refresh(). Ovviamente, all'interno del metodo DrawTabCaption, devi aggiungere logica per controllare il valore di var1 e impostare di conseguenza il colore delle tab.
Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom -
-
-
-