Assembly : System.Windows.Forms (dans system.windows.forms.dll)
SyntaxePublic NotInheritable Class ProgressBarRenderer
Dim instance As ProgressBarRenderer
public sealed class ProgressBarRenderer
public ref class ProgressBarRenderer sealed
public final class ProgressBarRenderer
public final class ProgressBarRenderer
NotesLa classe ProgressBarRenderer fournit un jeu de méthodes static qui peut être utilisé pour restituer un contrôle de barre de progression avec le style visuel actuel du système d'exploitation. Le rendu d'un contrôle fait référence au dessin de l'interface utilisateur d'un contrôle. Cela est utile si vous dessinez un contrôle personnalisé qui doit avoir l'apparence du style visuel actuel. Pour dessiner une barre de progression, utilisez les méthodes DrawHorizontalBar ou DrawVerticalBar pour dessiner la barre vide, puis utilisez les méthodes DrawHorizontalChunks ou DrawVerticalChunks pour dessiner les éléments qui remplissent la barre.
Si les styles visuels sont activés dans le système d'exploitation et appliqués à la zone client des fenêtres d'application, les méthodes de cette classe dessineront la barre de progression avec le style visuel actuel. Sinon, les méthodes et les propriétés de cette classe lèvent une InvalidOperationException. Pour déterminer si les membres de cette classe peuvent être utilisés, vous pouvez vérifier la valeur de la propriété IsSupported.
Cette classe encapsule les fonctionnalités d'un System.Windows.Forms.VisualStyles.VisualStyleRenderer qui a pour valeur l'un des éléments exposés par les classes System.Windows.Forms.VisualStyles.VisualStyleElement.ProgressBar.Bar, System.Windows.Forms.VisualStyles.VisualStyleElement.ProgressBar.BarVertical, System.Windows.Forms.VisualStyles.VisualStyleElement.ProgressBar.Chunk et System.Windows.Forms.VisualStyles.VisualStyleElement.ProgressBar.ChunkVertical. Pour plus d'informations, consultez Rendu des contrôles avec les styles visuels.
Remarque sur la plate-forme Windows XP Édition Familiale, Windows XP Professionnel Édition x64, Windows Server 2003 : Les styles visuels sont pris en charge uniquement sur ces plates-formes.
ExempleL'exemple de code suivant illustre la création d'un contrôle personnalisé qui utilise les méthodes DrawVerticalBar et DrawVerticalChunks pour dessiner une barre de progression verticale. Le contrôle utilise un Timer pour redessiner la barre de progression en ajoutant un fragment à chaque seconde. La méthode SetupProgressBar utilise les propriétés ChunkThickness et ChunkSpaceThickness pour calculer la hauteur de chaque rectangle dessiné qui s'agrandit progressivement.
Imports System Imports System.Drawing Imports System.Windows.Forms Imports System.Windows.Forms.VisualStyles Public Class Form1 Inherits Form Private bar1 As New VerticalProgressBar() Private button1 As New Button() Public Sub New() Me.Size = New Size(500, 500) bar1.NumberChunks = 30 button1.Location = New Point(150, 10) button1.Size = New Size(150, 30) button1.Text = "Start VerticalProgressBar" AddHandler button1.Click, AddressOf button1_Click Controls.AddRange(New Control() {button1, bar1}) End Sub 'New <STAThread()> _ Public Shared Sub Main() ' The call to EnableVisualStyles below does not affect ' whether ProgressBarRenderer.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 'Main ' Start the VerticalProgressBar. Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) bar1.Start() End Sub 'button1_Click End Class 'Form1 Public Class VerticalProgressBar Inherits Control Private numberChunksValue As Integer Private ticks As Integer Private progressTimer As New Timer() Private progressBarRectangles() As Rectangle Public Sub New() Me.Location = New Point(10, 10) Me.Width = 50 ' The progress bar will update every second. progressTimer.Interval = 1000 AddHandler progressTimer.Tick, AddressOf progressTimer_Tick ' This property also calls SetupProgressBar to initialize ' the progress bar rectangles if styles are enabled. NumberChunks = 20 ' Set the default height if visual styles are not enabled. If Not ProgressBarRenderer.IsSupported Then Me.Height = 100 End If End Sub 'New ' Specify the number of progress bar chunks to base the height on. Public Property NumberChunks() As Integer Get Return numberChunksValue End Get Set If value <= 50 AndAlso value > 0 Then numberChunksValue = value Else MessageBox.Show("Number of chunks must be between " + "0 and 50; defaulting to 10") numberChunksValue = 10 End If ' Recalculate the progress bar size, if visual styles ' are active. If ProgressBarRenderer.IsSupported Then SetupProgressBar() End If End Set End Property ' Draw the progress bar in its normal state. Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs) MyBase.OnPaint(e) If ProgressBarRenderer.IsSupported Then ProgressBarRenderer.DrawVerticalBar(e.Graphics, ClientRectangle) Me.Parent.Text = "VerticalProgressBar Enabled" Else Me.Parent.Text = "VerticalProgressBar Disabled" End If End Sub 'OnPaint ' Initialize the rectangles used to paint the states of the ' progress bar. Private Sub SetupProgressBar() If Not ProgressBarRenderer.IsSupported Then Return End If ' Determine the size of the progress bar frame. Me.Size = New Size(ClientRectangle.Width, NumberChunks *(ProgressBarRenderer.ChunkThickness + 2 * ProgressBarRenderer.ChunkSpaceThickness) + 6) ' Initialize the rectangles to draw each step of the ' progress bar. progressBarRectangles = New Rectangle(NumberChunks) {} Dim i As Integer For i = 0 To NumberChunks ' Use the thickness defined by the current visual style ' to calculate the height of each rectangle. The size ' adjustments ensure that the chunks do not paint over ' the frame. Dim filledRectangleHeight As Integer = (i + 1) _ *(ProgressBarRenderer.ChunkThickness + 2 * ProgressBarRenderer.ChunkSpaceThickness) progressBarRectangles(i) = New Rectangle(ClientRectangle.X + 3, _ ClientRectangle.Y + ClientRectangle.Height - 3 - filledRectangleHeight, _ ClientRectangle.Width - 6, filledRectangleHeight) Next i End Sub 'SetupProgressBar ' Handle the timer tick; draw each progressively larger rectangle. Private Sub progressTimer_Tick(ByVal myObject As [Object], ByVal e As EventArgs) If ticks < NumberChunks Then Dim g As Graphics = Me.CreateGraphics() Try ProgressBarRenderer.DrawVerticalChunks(g, progressBarRectangles(ticks)) ticks += 1 Finally g.Dispose() End Try Else progressTimer.Enabled = False End If End Sub 'progressTimer_Tick ' Start the progress bar. Public Sub Start() If ProgressBarRenderer.IsSupported Then progressTimer.Start() Else MessageBox.Show("VerticalScrollBar requires visual styles") End If End Sub 'Start End Class 'VerticalProgressBar
using System; using System.Drawing; using System.Windows.Forms; using System.Windows.Forms.VisualStyles; namespace ProgressBarRendererSample { public class Form1 : Form { private VerticalProgressBar bar1 = new VerticalProgressBar(); private Button button1 = new Button(); public Form1() : base() { this.Size = new Size(500, 500); bar1.NumberChunks = 30; button1.Location = new Point(150, 10); button1.Size = new Size(150, 30); button1.Text = "Start VerticalProgressBar"; button1.Click += new EventHandler(button1_Click); Controls.AddRange(new Control[] { button1, bar1 }); } [STAThread] public static void Main() { // The call to EnableVisualStyles below does not affect // whether ProgressBarRenderer.IsSupported is true; as // long as visual styles are enabled by the operating system, // IsSupported is true. Application.EnableVisualStyles(); Application.Run(new Form1()); } // Start the VerticalProgressBar. private void button1_Click(object sender, EventArgs e) { bar1.Start(); } } public class VerticalProgressBar : Control { private int numberChunksValue; private int ticks; private Timer progressTimer = new Timer(); private Rectangle[] progressBarRectangles; public VerticalProgressBar() : base() { this.Location = new Point(10, 10); this.Width = 50; // The progress bar will update every second. progressTimer.Interval = 1000; progressTimer.Tick += new EventHandler(progressTimer_Tick); // This property also calls SetupProgressBar to initialize // the progress bar rectangles if styles are enabled. NumberChunks = 20; // Set the default height if visual styles are not enabled. if (!ProgressBarRenderer.IsSupported) { this.Height = 100; } } // Specify the number of progress bar chunks to base the height on. public int NumberChunks { get { return numberChunksValue; } set { if (value <= 50 && value > 0) { numberChunksValue = value; } else { MessageBox.Show("Number of chunks must be between " + "0 and 50; defaulting to 10"); numberChunksValue = 10; } // Recalculate the progress bar size, if visual styles // are active. if (ProgressBarRenderer.IsSupported) { SetupProgressBar(); } } } // Draw the progress bar in its normal state. protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); if (ProgressBarRenderer.IsSupported) { ProgressBarRenderer.DrawVerticalBar(e.Graphics, ClientRectangle); this.Parent.Text = "VerticalProgressBar Enabled"; } else { this.Parent.Text = "VerticalProgressBar Disabled"; } } // Initialize the rectangles used to paint the states of the // progress bar. private void SetupProgressBar() { if (!ProgressBarRenderer.IsSupported) { return; } // Determine the size of the progress bar frame. this.Size = new Size(ClientRectangle.Width, (NumberChunks) * (ProgressBarRenderer.ChunkThickness + (2 * ProgressBarRenderer.ChunkSpaceThickness)) + 6); // Initialize the rectangles to draw each step of the // progress bar. progressBarRectangles = new Rectangle[NumberChunks]; for (int i = 0; i < NumberChunks; i++) { // Use the thickness defined by the current visual style // to calculate the height of each rectangle. The size // adjustments ensure that the chunks do not paint over // the frame. int filledRectangleHeight = ((i + 1) * (ProgressBarRenderer.ChunkThickness + (2 * ProgressBarRenderer.ChunkSpaceThickness))); progressBarRectangles[i] = new Rectangle( ClientRectangle.X + 3, ClientRectangle.Y + ClientRectangle.Height - 3 - filledRectangleHeight, ClientRectangle.Width - 6, filledRectangleHeight); } } // Handle the timer tick; draw each progressively larger rectangle. private void progressTimer_Tick(Object myObject, EventArgs e) { if (ticks < NumberChunks) { using (Graphics g = this.CreateGraphics()) { ProgressBarRenderer.DrawVerticalChunks(g, progressBarRectangles[ticks]); ticks++; } } else { progressTimer.Enabled = false; } } // Start the progress bar. public void Start() { if (ProgressBarRenderer.IsSupported) { progressTimer.Start(); } else { MessageBox.Show("VerticalScrollBar requires visual styles"); } } } }
#using <System.Drawing.dll> #using <System.Windows.Forms.dll> #using <System.dll> using namespace System; using namespace System::Drawing; using namespace System::Windows::Forms; using namespace System::Windows::Forms::VisualStyles; namespace ProgressBarRendererSample { public ref class VerticalProgressBar : public Control { private: int numberChunksValue; int ticks; Timer^ progressTimer; array<Rectangle>^ progressBarRectangles; public: VerticalProgressBar() : Control() { this->Location = Point(10, 10); this->Width = 50; progressTimer = gcnew Timer(); // The progress bar will update every second. progressTimer->Interval = 1000; progressTimer->Tick += gcnew EventHandler(this, &VerticalProgressBar::progressTimer_Tick); // This property also calls SetupProgressBar to initialize // the progress bar rectangles if styles are enabled. NumberChunks = 20; // Set the default height if visual styles are not enabled. if (!ProgressBarRenderer::IsSupported) { this->Height = 100; } } // Specify the number of progress bar chunks to base the height on. public: property int NumberChunks { int get() { return numberChunksValue; } void set(int value) { if (value <= 50 && value > 0) { numberChunksValue = value; } else { MessageBox::Show("Number of chunks must be between " + "0 and 50; defaulting to 10"); numberChunksValue = 10; } // Recalculate the progress bar size, if visual styles // are active. if (ProgressBarRenderer::IsSupported) { SetupProgressBar(); } } } // Draw the progress bar in its normal state. protected: virtual void OnPaint(PaintEventArgs^ e) override { __super::OnPaint(e); if (ProgressBarRenderer::IsSupported) { ProgressBarRenderer::DrawVerticalBar(e->Graphics, ClientRectangle); this->Parent->Text = "VerticalProgressBar Enabled"; } else { this->Parent->Text = "VerticalProgressBar Disabled"; } } // Initialize the rectangles used to paint the states of the // progress bar. private: void SetupProgressBar() { if (!ProgressBarRenderer::IsSupported) { return; } // Determine the size of the progress bar frame. this->Size = System::Drawing::Size(ClientRectangle.Width, (NumberChunks * (ProgressBarRenderer::ChunkThickness + (2 * ProgressBarRenderer::ChunkSpaceThickness))) + 6); // Initialize the rectangles to draw each step of the // progress bar. progressBarRectangles = gcnew array<Rectangle>(NumberChunks); for (int i = 0; i < NumberChunks; i++) { // Use the thickness defined by the current visual style // to calculate the height of each rectangle. The size // adjustments ensure that the chunks do not paint over // the frame. int filledRectangleHeight = ((i + 1) * (ProgressBarRenderer::ChunkThickness + (2 * ProgressBarRenderer::ChunkSpaceThickness))); progressBarRectangles[i] = Rectangle( ClientRectangle.X + 3, ClientRectangle.Y + ClientRectangle.Height - 3 - filledRectangleHeight, ClientRectangle.Width - 6, filledRectangleHeight); } } // Handle the timer tick; draw each progressively larger rectangle. private: void progressTimer_Tick(Object^ myObject, EventArgs^ e) { if (ticks < NumberChunks) { Graphics^ g = this->CreateGraphics(); ProgressBarRenderer::DrawVerticalChunks(g, progressBarRectangles[ticks]); ticks++; } else { progressTimer->Enabled = false; } } // Start the progress bar. public: void Start() { if (ProgressBarRenderer::IsSupported) { progressTimer->Start(); } else { MessageBox::Show("VerticalScrollBar requires visual styles"); } } }; public ref class Form1 : public Form { private: VerticalProgressBar^ bar1; Button^ button1; public: Form1() : Form() { this->Size = System::Drawing::Size(500, 500); bar1 = gcnew VerticalProgressBar(); bar1->NumberChunks = 30; button1 = gcnew Button(); button1->Location = Point(150, 10); button1->Size = System::Drawing::Size(150, 30); button1->Text = "Start VerticalProgressBar"; button1->Click += gcnew EventHandler(this, &Form1::button1_Click); Controls->AddRange(gcnew array<Control^> { button1, bar1 }); } // Start the VerticalProgressBar. private: void button1_Click(Object^ sender, EventArgs^ e) { bar1->Start(); } }; } [STAThread] int main() { // The call to EnableVisualStyles below does not affect // whether ProgressBarRenderer.IsSupported is true; as // long as visual styles are enabled by the operating system, // IsSupported is true. Application::EnableVisualStyles(); Application::Run(gcnew ProgressBarRendererSample::Form1()); }
Sécurité des threads
Plates-formesWindows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile pour Pocket PC, Windows Mobile pour Smartphone, Windows Server 2003, Windows XP Édition Media Center, Windows XP Professionnel Édition x64, Windows XP SP2, Windows XP Starter Edition
Le .NET Framework ne prend pas en charge toutes les versions de chaque plate-forme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise.
Outils (masquer)
S'enregistrer
Liste des Membres
Qui est en ligne?
FAQ