Visualizzazione dei risultati da 1 a 8 su 8

Visualizzazione discussione

  1. #2
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Quote Originariamente inviata da Kahm Visualizza il messaggio
    salve a tutti
    vorrei evidenziare l'etichetta di una tab control di rosso
    ovviamente non cambiando il font, ma da drawstring!

    utilizzando il seguente codice:

    codice:
    'variabili
    Dim rect As New System.Drawing.Rectangle
        Dim RedPen As New Pen(Color.Red, 3)
        Dim graphics As System.Drawing.Graphics
    
    
            
            
             rect = TABControl1.Bounds 
            graphics.DrawRectangle(RedPen, rect)
            Dim ScreenLocation As Point
            Dim p As Point = New Point(rect.X, rect.Y)
            If Not parent Is Nothing Then
                ScreenLocation = parent.PointToScreen(p)
    il problema è che mi disegna una rettangolo rosso: TUTTO OK
    ma su tutta l'area della tab control
    mentre io voglio solo sulla linguetta in alto

    cosa sbaglio?
    in tutte le proprietà della tab control non c'è qualcosa che ti gestisce la linguetta
    Ciao,
    in quel codice direi che sbagli le dimensioni del rettangolo....

    Le dimensioni della "label" si ottengono dal parametro di tipo DrawItemEventArgs che viene passato al metodo (o funzione in vb) OnDrawItem del TabControl, ti basta fare un override di quest'ultimo e non dovresti più avere problemi. Non dimenticare di impostare DrawMode del TabControl a TabDrawMode.OwnerDrawFixed

    codice:
    Public Class MyTabControl
        Inherits TabControl
    
    Public Sub New()
            Me.DrawMode = TabDrawMode.OwnerDrawFixed
        End Sub
    
       Protected Overrides Sub OnDrawItem(e As DrawItemEventArgs)
           Dim coloreTesto As Brush = New System.Drawing.SolidBrush(e.ForeColor)
           If e.State = DrawItemState.Selected Then
               coloreTesto = ColoreTestoSelezionato
               e.Graphics.FillRectangle(ColoreSfondoSelezionato, e.Bounds)
           Else
               e.DrawBackground()
           End If
           e.Graphics.DrawString(Me.TabPages(e.Index).Text, Font, coloreTesto, Me.GetTabRect(e.Index), New StringFormat(Me.AllineamentoScritta))
           MyBase.OnDrawItem(e)
       End Sub
    
        Private m_coloreTestoSelezionato As Brush = New SolidBrush(Color.WhiteSmoke)
        Public Property ColoreTestoSelezionato() As Brush
            Get
                Return Me.m_coloreTestoSelezionato
            End Get
            Set(value As Brush)
                Me.m_coloreTestoSelezionato = value
            End Set
        End Property
        Private m_coloreSfondoSelezionato As Brush = New SolidBrush(Color.Red)
        Public Property ColoreSfondoSelezionato() As Brush
            Get
                Return Me.m_coloreSfondoSelezionato
            End Get
            Set(value As Brush)
                Me.m_coloreSfondoSelezionato = value
            End Set
        End Property
        Private m_allineamentoScritta As New StringFormat() With { _
             .Alignment = StringAlignment.Center, _
             .LineAlignment = StringAlignment.Center _
        }
        Public Property AllineamentoScritta() As StringFormat
            Get
                Return Me.m_allineamentoScritta
            End Get
            Set(value As StringFormat)
                Me.m_allineamentoScritta = value
            End Set
        End Property     
    End Class
    Comunque se vuoi personalizzare davvero le tue applicazioni senza troppi sbattimenti, ti consiglio di passare a WPF, parliamo di un altro mondo...

    Ultima modifica di U235; 05-10-2013 a 03:13

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.