Actualización: noviembre 2007
Proporciona métodos que se utilizan para representar un control de barra de seguimiento con estilos visuales. Esta clase no se puede heredar.
Ensamblado: System.Windows.Forms (en System.Windows.Forms.dll)
Public NotInheritable Class TrackBarRenderer
Dim instance As TrackBarRenderer
public sealed class TrackBarRenderer
public ref class TrackBarRenderer sealed
public final class TrackBarRenderer
public final class TrackBarRenderer
La clase TrackBarRenderer proporciona un conjunto de métodos static que se pueden utilizar para representar cada parte de un control de barra de seguimiento con el estilo visual actual definido en el sistema operativo. Representar un control significa diseñar la interfaz de usuario de un control. Esto resulta útil si pretende dibujar un control personalizado que tenga el aspecto del estilo visual actual.
Si los estilos visuales están habilitados en el sistema operativo y se aplican al área de cliente de las ventanas de la aplicación, los métodos de esta clase dibujarán la barra de seguimiento con el estilo visual actual. De lo contrario, los métodos de esta clase producirán una excepción InvalidOperationException. Para determinar si pueden utilizarse los miembros de esta clase, puede comprobar el valor de la propiedad IsSupported.
Esta clase ajusta la funcionalidad de un control System.Windows.Forms.VisualStyles.VisualStyleRenderer cuyo valor está establecido en uno de los elementos expuestos por la clase System.Windows.Forms.VisualStyles.VisualStyleElement.TrackBar. Para obtener más información, vea Representar controles con estilos visuales.
Nota de la plataforma Windows XP Home Edition, Windows XP Professional x64 Edition, Windows Server 2003:
Los estilos visuales sólo se admiten en estas plataformas.
En el ejemplo de código siguiente se muestra cómo se crea un control personalizado que utiliza el método TrackBarRenderer para dibujar una barra de seguimiento horizontal que responde a los clics del mouse (ratón).
Imports System Imports System.Drawing Imports System.Windows.Forms Imports System.Windows.Forms.VisualStyles Namespace TrackBarRendererSample Class Form1 Inherits Form Public Sub New() Dim TrackBar1 As New CustomTrackBar(19, New Size(300, 50)) Me.Width = 500 Me.Controls.Add(TrackBar1) End Sub <STAThread()> _ Shared Sub Main() ' Note that the call to EnableVisualStyles below does ' not affect whether TrackBarRenderer.IsSupported is true; ' as long as visual styles are enabled by the operating system, ' IsSupported is true. Application.EnableVisualStyles() Application.Run(New Form1()) End Sub End Class Class CustomTrackBar Inherits Control Private numberTicks As Integer = 10 Private trackRectangle As New Rectangle() Private ticksRectangle As New Rectangle() Private thumbRectangle As New Rectangle() Private currentTickPosition As Integer = 0 Private tickSpace As Single = 0 Private thumbClicked As Boolean = False Private thumbState As TrackBarThumbState = TrackBarThumbState.Normal Public Sub New(ByVal ticks As Integer, ByVal trackBarSize As Size) With Me .Location = New Point(10, 10) .Size = trackBarSize .numberTicks = ticks .BackColor = Color.DarkCyan .DoubleBuffered = True End With ' Calculate the initial sizes of the bar, ' thumb and ticks. SetupTrackBar() End Sub ' Calculate the sizes of the bar, thumb, and ticks rectangle. Private Sub SetupTrackBar() If Not TrackBarRenderer.IsSupported Then Return End If Using g As Graphics = Me.CreateGraphics() ' Calculate the size of the track bar. trackRectangle.X = ClientRectangle.X + 2 trackRectangle.Y = ClientRectangle.Y + 28 trackRectangle.Width = ClientRectangle.Width - 4 trackRectangle.Height = 4 ' Calculate the size of the rectangle in which to ' draw the ticks. ticksRectangle.X = trackRectangle.X + 4 ticksRectangle.Y = trackRectangle.Y - 8 ticksRectangle.Width = trackRectangle.Width - 8 ticksRectangle.Height = 4 tickSpace = (CSng(ticksRectangle.Width) - 1) / _ (CSng(numberTicks) - 1) ' Calculate the size of the thumb. thumbRectangle.Size = _ TrackBarRenderer.GetTopPointingThumbSize( _ g, TrackBarThumbState.Normal) thumbRectangle.X = CurrentTickXCoordinate() thumbRectangle.Y = trackRectangle.Y - 8 End Using End Sub Private Function CurrentTickXCoordinate() As Integer If tickSpace = 0 Then Return 0 Else Return CInt(Math.Round(tickSpace)) * currentTickPosition End If End Function ' Draw the track bar. Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs) If Not TrackBarRenderer.IsSupported Then Me.Parent.Text = "CustomTrackBar Disabled" Return End If Me.Parent.Text = "CustomTrackBar Enabled" TrackBarRenderer.DrawHorizontalTrack(e.Graphics, _ trackRectangle) TrackBarRenderer.DrawTopPointingThumb(e.Graphics, _ thumbRectangle, thumbState) TrackBarRenderer.DrawHorizontalTicks(e.Graphics, _ ticksRectangle, numberTicks, EdgeStyle.Raised) End Sub ' Determine whether the user has clicked the track bar thumb. Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs) If Not TrackBarRenderer.IsSupported Then Return End If If Me.thumbRectangle.Contains(e.Location) Then thumbClicked = True thumbState = TrackBarThumbState.Pressed End If Me.Invalidate() End Sub ' Redraw the track bar thumb if the user has moved it. Protected Overrides Sub OnMouseUp(ByVal e As MouseEventArgs) If Not TrackBarRenderer.IsSupported Then Return End If If thumbClicked = True Then If e.Location.X > trackRectangle.X And _ e.Location.X < trackRectangle.X + _ trackRectangle.Width - thumbRectangle.Width Then thumbClicked = False thumbState = TrackBarThumbState.Hot Me.Invalidate() End If thumbClicked = False End If End Sub ' Track cursor movements. Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs) If Not TrackBarRenderer.IsSupported Then Return End If ' The user is moving the thumb. If thumbClicked = True Then ' Track movements to the next tick to the right, if the ' cursor has moved halfway to the next tick. If currentTickPosition < numberTicks - 1 And _ e.Location.X > CurrentTickXCoordinate() + _ CInt(tickSpace) Then currentTickPosition += 1 ' Track movements to the next tick to the left, if ' the cursor has moved halfway to the next tick. Else If currentTickPosition > 0 And _ e.Location.X < CurrentTickXCoordinate() - _ CInt(tickSpace / 2) Then currentTickPosition -= 1 End If End If thumbRectangle.X = CurrentTickXCoordinate() ' The cursor is passing over the track. Else If thumbRectangle.Contains(e.Location) Then thumbState = TrackBarThumbState.Hot Else thumbState = TrackBarThumbState.Normal End If End If Invalidate() End Sub End Class End Namespace
using System; using System.Drawing; using System.Windows.Forms; using System.Windows.Forms.VisualStyles; namespace TrackBarRendererSample { class Form1 : Form { public Form1() { CustomTrackBar TrackBar1 = new CustomTrackBar(19, new Size(300, 50)); this.Width = 500; this.Controls.Add(TrackBar1); } [STAThread] static void Main() { // Note that the call to EnableVisualStyles below does // not affect whether TrackBarRenderer.IsSupported is true; // as long as visual styles are enabled by the operating system, // IsSupported is true. Application.EnableVisualStyles(); Application.Run(new Form1()); } } class CustomTrackBar : Control { private int numberTicks = 10; private Rectangle trackRectangle = new Rectangle(); private Rectangle ticksRectangle = new Rectangle(); private Rectangle thumbRectangle = new Rectangle(); private int currentTickPosition = 0; private float tickSpace = 0; private bool thumbClicked = false; private TrackBarThumbState thumbState = TrackBarThumbState.Normal; public CustomTrackBar(int ticks, Size trackBarSize) { this.Location = new Point(10, 10); this.Size = trackBarSize; this.numberTicks = ticks; this.BackColor = Color.DarkCyan; this.DoubleBuffered = true; // Calculate the initial sizes of the bar, // thumb and ticks. SetupTrackBar(); } // Calculate the sizes of the bar, thumb, and ticks rectangle. private void SetupTrackBar() { if (!TrackBarRenderer.IsSupported) return; using (Graphics g = this.CreateGraphics()) { // Calculate the size of the track bar. trackRectangle.X = ClientRectangle.X + 2; trackRectangle.Y = ClientRectangle.Y + 28; trackRectangle.Width = ClientRectangle.Width - 4; trackRectangle.Height = 4; // Calculate the size of the rectangle in which to // draw the ticks. ticksRectangle.X = trackRectangle.X + 4; ticksRectangle.Y = trackRectangle.Y - 8; ticksRectangle.Width = trackRectangle.Width - 8; ticksRectangle.Height = 4; tickSpace = ((float)ticksRectangle.Width - 1) / ((float)numberTicks - 1); // Calculate the size of the thumb. thumbRectangle.Size = TrackBarRenderer.GetTopPointingThumbSize(g, TrackBarThumbState.Normal); thumbRectangle.X = CurrentTickXCoordinate(); thumbRectangle.Y = trackRectangle.Y - 8; } } private int CurrentTickXCoordinate() { if (tickSpace == 0) { return 0; } else { return ((int)Math.Round(tickSpace) * currentTickPosition); } } // Draw the track bar. protected override void OnPaint(PaintEventArgs e) { if (!TrackBarRenderer.IsSupported) { this.Parent.Text = "CustomTrackBar Disabled"; return; } this.Parent.Text = "CustomTrackBar Enabled"; TrackBarRenderer.DrawHorizontalTrack(e.Graphics, trackRectangle); TrackBarRenderer.DrawTopPointingThumb(e.Graphics, thumbRectangle, thumbState); TrackBarRenderer.DrawHorizontalTicks(e.Graphics, ticksRectangle, numberTicks, EdgeStyle.Raised); } // Determine whether the user has clicked the track bar thumb. protected override void OnMouseDown(MouseEventArgs e) { if (!TrackBarRenderer.IsSupported) return; if (this.thumbRectangle.Contains(e.Location)) { thumbClicked = true; thumbState = TrackBarThumbState.Pressed; } this.Invalidate(); } // Redraw the track bar thumb if the user has moved it. protected override void OnMouseUp(MouseEventArgs e) { if (!TrackBarRenderer.IsSupported) return; if (thumbClicked == true) { if (e.Location.X > trackRectangle.X && e.Location.X < (trackRectangle.X + trackRectangle.Width - thumbRectangle.Width)) { thumbClicked = false; thumbState = TrackBarThumbState.Hot; this.Invalidate(); } thumbClicked = false; } } // Track cursor movements. protected override void OnMouseMove(MouseEventArgs e) { if (!TrackBarRenderer.IsSupported) return; // The user is moving the thumb. if (thumbClicked == true) { // Track movements to the next tick to the right, if // the cursor has moved halfway to the next tick. if (currentTickPosition < numberTicks - 1 && e.Location.X > CurrentTickXCoordinate() + (int)(tickSpace)) { currentTickPosition++; } // Track movements to the next tick to the left, if // cursor has moved halfway to the next tick. else if (currentTickPosition > 0 && e.Location.X < CurrentTickXCoordinate() - (int)(tickSpace / 2)) { currentTickPosition--; } thumbRectangle.X = CurrentTickXCoordinate(); } // The cursor is passing over the track. else { thumbState = thumbRectangle.Contains(e.Location) ? TrackBarThumbState.Hot : TrackBarThumbState.Normal; } Invalidate(); } } }
System.Windows.Forms.TrackBarRenderer
Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98
.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.