+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 7 su 7

[VB 2010 Exp] Cambiare colore BackColor alla linguetta di una TabPage

  1. #1
    L'avatar di GarGia1960
    GarGia1960 non  in linea Scolaretto
    Ciao a tutti,

    avrei un tabControl posizionato su una Form la quale ha dei colori personalizzati ( nel senso che non sono di sistema)

    Allora ho assegnato a questa tabControl gli stessi colori di sfondo (tabControl.Background = form.Background).

    Il problema e' che non si cambia anche lo sfondo dei pulsanti del tabControl e mi rimangono color Grigio come da sistema.

    C'e' un modo per ovviare a questo problema che e' antiestetico?

    Anche con le API andrebbe bene, e' solo questione di estetica.

    Vi ringrazio a chi mi aiuta.

  2. #2
    Quote Originariamente inviato da GarGia1960 Visualizza il messaggio
    Il problema e' che non si cambia anche lo sfondo dei pulsanti del tabControl e mi rimangono color Grigio come da sistema.

    C'e' un modo per ovviare a questo problema che e' antiestetico?

    Anche con le API andrebbe bene, e' solo questione di estetica.
    Con le API proprio no, non te lo consiglierei, anche perch se hanno inventato il FrameWork una ragione ci sar.
    Comunque per "pulsanti" intendi le "linguette" che permettono la selezione manuale delle TabPages ?
    ℹ️ Leggi di pi su MarcoGG ...

  3. #3
    L'avatar di GarGia1960
    GarGia1960 non  in linea Scolaretto
    Quote Originariamente inviato da MarcoGG Visualizza il messaggio
    Comunque per "pulsanti" intendi le "linguette" che permettono la selezione manuale delle TabPages ?
    Si proprio quelle.

  4. #4
    L'avatar di Sambu
    Sambu non  in linea Scolaretto
    L'unica soluzione secondo me che devi disegnarle tu.
        ''' <summary>
        ''' disegno ownerdraw del tabcontrol
        ''' </summary>
        ''' <remarks>.DrawMode = TabDrawMode.OwnerDrawFixed .SizeMode = TabSizeMode.Fixed</remarks>
        Private Sub TabControl1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles TabControl1.DrawItem
    
            Static normalFont, selectedFont As Font
            Static normalColor As Brush, selectedColor As Brush
            Static fmt As StringFormat
            If normalFont Is Nothing Then
                normalFont = New Font("Arial", 8)
                selectedFont = New Font("Arial", 8, FontStyle.Bold)
                normalColor = Brushes.Black
                selectedColor = Brushes.Blue
                fmt = New StringFormat
                fmt.Alignment = StringAlignment.Center
                fmt.LineAlignment = StringAlignment.Center
            End If
    
            Dim tbc As TabControl = DirectCast(sender, TabControl)
    
            Dim bc As Color = tbc.TabPages(e.Index).BackColor
            Dim p As New Pen(bc)
    
            Dim tbcBackgroundRect As New System.Drawing.RectangleF(tbc.Left + 1, tbc.Top + e.Bounds.Y + e.Bounds.Height + 3, tbc.Width - 3, tbc.Height - (e.Bounds.Y + e.Bounds.Height + 4))
            Dim tabPageRect As New System.Drawing.RectangleF(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height + 2)
    
            e.Graphics.FillRectangle(p.Brush, tbcBackgroundRect)
            e.Graphics.FillRectangle(p.Brush, tabPageRect)
    
    
            If tbc.SelectedIndex = e.Index Then
                e.Graphics.DrawString(tbc.TabPages(e.Index).Text, selectedFont, selectedColor, e.Bounds, fmt)
            Else
                e.Graphics.DrawString(tbc.TabPages(e.Index).Text, normalFont, normalColor, e.Bounds, fmt)
            End If
        End Sub
    
        Private Sub FrmC_SizeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.SizeChanged
            Dim tbc As TabControl = TabControl1
            tbc.ItemSize = New Size((tbc.Width - 4) \ tbc.TabPages.Count, tbc.ItemSize.Height)
        End Sub
    
    fonte: visual-basic.it

  5. #5
    L'avatar di GarGia1960
    GarGia1960 non  in linea Scolaretto
    In effetti il colore cambia ma mi rimangono dei bordi bianchi attorno alle linguette.

    Adesso vedo di studiarmi il codice se posso modificare qualcosa.

    Grazie Sambu.

    Altre soluzioni sono bene accette altrimento uso questa di Sambu.

  6. #6
    Una soluzione possibile, e consigliabile in generale, di creare una propria Classe che eredita da TabControl, impostando e gestendo a piacere TabDrawMode.OwnerDrawFixed e OnDrawItem.

    Il codice essenziale per fare ci, nel tuo caso, potrebbe essere questo :

    Public Class MyTabControl
        Inherits TabControl
    
        Private m_coloretp As Color = Color.White
    
        Public Property ColoreTP As Color
            Get
                Return m_coloretp
            End Get
            Set(ByVal value As Color)
                m_coloretp = value
            End Set
        End Property
    
        Public Sub New()
    
            Me.DrawMode = TabDrawMode.OwnerDrawFixed
    
        End Sub
    
        Protected Overrides Sub OnDrawItem(ByVal e As System.Windows.Forms.DrawItemEventArgs)
    
            Dim brushTitolo As Brush = New SolidBrush(Me.TabPages(e.Index).ForeColor)
            Dim brushSfondo As Brush = New SolidBrush(m_coloretp)
            Dim R As Rectangle = Me.GetTabRect(e.Index)
            Dim titoloTP As String = Me.TabPages(e.Index).Text
            e.Graphics.FillRectangle(brushSfondo, R)
            e.Graphics.DrawString(titoloTP, Me.Font, brushTitolo, New PointF(R.X, R.Y))
    
        End Sub
    
    End Class
    
    La Property ColoreTP ti permette, ad esempio a runtime, di cambiare il colore delle linguette di selezione.

    Inoltre ti segnalo anche questo mio articolo, da tempo su MD, e che potrebbe essere di tuo interesse :
    http://forum.masterdrive.it/visual-b...lizzato-49987/

    ℹ️ Leggi di pi su MarcoGG ...

  7. #7
    L'avatar di GarGia1960
    GarGia1960 non  in linea Scolaretto
    Scusami MarcoGG ma proprio 5 secondi prima avevo letto questo articolo e credo che lo adattero' alle mie esigenze.

    Vi ringrazio tutti per i suggerimenti.

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Risolto: [VB 2010] Cambiare tabpage con un button
    Da ommu nel forum Visual Basic .Net
    Risposte: 2
    Ultimo Post: 09-12-2012, 00:17
  2. [VBEE2010]Datagridview Cambiare il colore alla colonna
    Da vbrookie nel forum Visual Basic .Net
    Risposte: 1
    Ultimo Post: 21-10-2012, 07:10
  3. [VB 2010] Cambiare il colore di sfondo della Textbox
    Da nicolas83 nel forum Visual Basic .Net
    Risposte: 3
    Ultimo Post: 03-04-2011, 14:08
  4. [WIN32] Impostare colore pagine TABPAGE
    Da marco86188 nel forum C/C++
    Risposte: 0
    Ultimo Post: 14-09-2010, 15:24
  5. Cambio colore del font,backcolor in auto
    Da lupin_peter nel forum Visual Basic .Net
    Risposte: 1
    Ultimo Post: 08-02-2005, 14:16