Erstellen eine optimierten Statusleiste in Visual C#

Eine Microsoft Visual Basic .NET Version dieses Artikels finden Sie unter 323088 .

Zusammenfassung

Dieser Artikel veranschaulicht, wie ein einfaches, benutzerdefiniertes UserControl Erstellen einer optimierten Bildlauf ProgressBar -Steuerelement erstellen.

In früheren Versionen das ProgressBar -Steuerelement wie Version, die mit Microsoft Windows Common Controls ActiveX-Steuerelement können Sie den Fortschritt in zwei verschiedenen Ansichten anzeigen. Ansichten steuern, verwenden Sie die Bildlauf -Eigenschaft, die Standard- und reibungslose Einstellungen enthält. Optimierten Bildlauf erzeugt einen einfarbiger Block, der den Fortschritt und standardmäßiger Bildlauf erscheint und besteht aus einer Reihe von kleinen Blöcken oder Rechtecke.

Das ProgressBar -Steuerelement, das mit Microsoft Visual C# ist unterstützt nur die Standardeinstellung.

Der Beispielcode in diesem Artikel veranschaulicht, wie ein Steuerelement erstellen, das die folgenden Eigenschaften unterstützt:

  • Minimum. Diese Eigenschaft ruft ab oder legt den Mindestwert für den Bereich der gültigen Werte für den Fortschritt. Der Standardwert dieser Eigenschaft ist NULL (0) Diese Eigenschaft kann nicht auf einen negativen Wert festgelegt werden.
  • Maximale. Diese Eigenschaft ruft ab oder legt den Höchstwert für den Bereich der gültigen Werte für den Fortschritt. Der Standardwert dieser Eigenschaft ist 100.
  • Wert. Diese Eigenschaft ruft ab oder legt den aktuellen Stand des Fortschritts. Der Wert muss im Bereich liegen, die minimalen und maximalen Eigenschaften definieren.
  • ProgressBarColor. Diese Eigenschaft ruft ab oder legt die Farbe der Statusanzeige.

Erstellen eines benutzerdefinierten ProgressBar-Steuerelements

  1. Führen Sie diese Schritte, um ein neues Windows-Steuerelementbibliothek-Projekt in Visual C# erstellen:
    1. Starten Sie Microsoft Visual Studio.
    2. Klicken Sie im Menü Datei auf neu und klicken Sie dann auf Projekt.
    3. Klicken Sie im Dialogfeld Neues Projekt auf Visual C# unter Projekttypenklicken Sie unter Vorlagenauf Windows Forms-Steuerelementbibliothek

      Hinweis Klicken Sie in Visual Studio .NET 2003 auf Visual C#-Projekte Visual C#.
    4. Geben Sie im Feld Name SmoothProgressBarund klicken Sie dann auf OK.
    5. Benennen Sie im Projekt-Explorer das Standardklassenmodul von UserControl1.cs "SmoothProgressBar.cs".
    6. Ändern Sie die Name -Eigenschaft im Fenster Eigenschaften für das UserControl -Objekt von UserControl1 , SmoothProgressBar.
  2. Zu diesem Zeitpunkt normalerweise Vererben der Klasse des Steuerelements und fügen Sie die zusätzliche Funktionalität ein vorhandenes Steuerelements erweitern. ProgressBar -Klasse, ist versiegelt und kann nicht geerbt werden. Daher müssen Sie das Steuerelement völlig erstellen.

    Fügen Sie den folgenden Code in die Datei "SmoothProgressBar.cs" in der Klasse, die von UserControl abgeleitet.

    Hinweis Fügen Sie Code in Visual Studio .NET 2003 zum Klassenmodul der abgeleitete UserControl-Klasse nach Abschnitt "Windows Formulardesigner generierter Code".
    int min = 0;// Minimum value for progress rangeint max = 100;// Maximum value for progress range
    int val = 0;// Current progress
    Color BarColor = Color.Blue;// Color of progress meter

    protected override void OnResize(EventArgs e)
    {
    // Invalidate the control to get a repaint.
    this.Invalidate();
    }

    protected override void OnPaint(PaintEventArgs e)
    {
    Graphics g = e.Graphics;
    SolidBrush brush = new SolidBrush(BarColor);
    float percent = (float)(val - min) / (float)(max - min);
    Rectangle rect = this.ClientRectangle;

    // Calculate area for drawing the progress.
    rect.Width = (int)((float)rect.Width * percent);

    // Draw the progress meter.
    g.FillRectangle(brush, rect);

    // Draw a three-dimensional border around the control.
    Draw3DBorder(g);

    // Clean up.
    brush.Dispose();
    g.Dispose();
    }

    public int Minimum
    {
    get
    {
    return min;
    }

    set
    {
    // Prevent a negative value.
    if (value < 0)
    {
    min = 0;
    }

    // Make sure that the minimum value is never set higher than the maximum value.
    if (value > max)
    {
    min = value;
    min = value;
    }

    // Ensure value is still in range
    if (val < min)
    {
    val = min;
    }

    // Invalidate the control to get a repaint.
    this.Invalidate();
    }
    }

    public int Maximum
    {
    get
    {
    return max;
    }

    set
    {
    // Make sure that the maximum value is never set lower than the minimum value.
    if (value < min)
    {
    min = value;
    }

    max = value;

    // Make sure that value is still in range.
    if (val > max)
    {
    val = max;
    }

    // Invalidate the control to get a repaint.
    this.Invalidate();
    }
    }

    public int Value
    {
    get
    {
    return val;
    }

    set
    {
    int oldValue = val;

    // Make sure that the value does not stray outside the valid range.
    if (value < min)
    {
    val = min;
    }
    else if (value > max)
    {
    val = max;
    }
    else
    {
    val = value;
    }

    // Invalidate only the changed area.
    float percent;

    Rectangle newValueRect = this.ClientRectangle;
    Rectangle oldValueRect = this.ClientRectangle;

    // Use a new value to calculate the rectangle for progress.
    percent = (float)(val - min) / (float)(max - min);
    newValueRect.Width = (int)((float)newValueRect.Width * percent);

    // Use an old value to calculate the rectangle for progress.
    percent = (float)(oldValue - min) / (float)(max - min);
    oldValueRect.Width = (int)((float)oldValueRect.Width * percent);

    Rectangle updateRect = new Rectangle();

    // Find only the part of the screen that must be updated.
    if (newValueRect.Width > oldValueRect.Width)
    {
    updateRect.X = oldValueRect.Size.Width;
    updateRect.Width = newValueRect.Width - oldValueRect.Width;
    }
    else
    {
    updateRect.X = newValueRect.Size.Width;
    updateRect.Width = oldValueRect.Width - newValueRect.Width;
    }

    updateRect.Height = this.Height;

    // Invalidate the intersection region only.
    this.Invalidate(updateRect);
    }
    }

    public Color ProgressBarColor
    {
    get
    {
    return BarColor;
    }

    set
    {
    BarColor = value;

    // Invalidate the control to get a repaint.
    this.Invalidate();
    }
    }

    private void Draw3DBorder(Graphics g)
    {
    int PenWidth = (int)Pens.White.Width;

    g.DrawLine(Pens.DarkGray,
    new Point(this.ClientRectangle.Left, this.ClientRectangle.Top),
    new Point(this.ClientRectangle.Width - PenWidth, this.ClientRectangle.Top));
    g.DrawLine(Pens.DarkGray,
    new Point(this.ClientRectangle.Left, this.ClientRectangle.Top),
    new Point(this.ClientRectangle.Left, this.ClientRectangle.Height - PenWidth));
    g.DrawLine(Pens.White,
    new Point(this.ClientRectangle.Left, this.ClientRectangle.Height - PenWidth),
    new Point(this.ClientRectangle.Width - PenWidth, this.ClientRectangle.Height - PenWidth));
    g.DrawLine(Pens.White,
    new Point(this.ClientRectangle.Width - PenWidth, this.ClientRectangle.Top),
    new Point(this.ClientRectangle.Width - PenWidth, this.ClientRectangle.Height - PenWidth));
    }

  3. Klicken Sie im Menü Erstellen auf Projektmappe erstellen , um das Projekt zu kompilieren.

Erstellen einer Beispiel-Clientanwendung

  1. Klicken Sie im Menü Datei auf neu und klicken Sie dann auf Projekt.
  2. Klicken Sie im Dialogfeld Neues Projekt hinzufügen klicken unter Projekttypenauf Visual C# klicken Sie unter Vorlagenauf Windows Forms-Anwendung , und klicken Sie dann auf OK.

    Hinweis Klicken Sie in Visual Studio .NET 2003 auf Visual C#-Projekte Visual C#.
  3. Gehen Sie zwei Instanzen des Steuerelements SmoothProgressBar zum Formular hinzufügen
    1. Klicken Sie im Menü Extras auf Toolboxelemente auswählen.

      Hinweis Klicken Sie auf Toolbox anpassen anstatt Toolboxelementein Visual Studio .NET 2003.
    2. Klicken Sie auf die Registerkarte .NET Framework-Komponenten .
    3. Klicken Sie auf Durchsuchen, und suchen Sie die Datei "SmoothProgressBar.dll", die im Abschnitt "Erstellen eines benutzerdefinierten ProgressBar-Steuerelements" erstellt.
    4. Klicken Sie auf OK. Beachten Sie, dass das SmoothProgressBar Steuerelement zur Toolbox hinzugefügt wird.
    5. Ziehen Sie zwei Instanzen des Steuerelements SmoothProgressBar aus der Toolbox in das Standardformular des Windows-Anwendungsprojekts.
  4. Ziehen Sie ein Timer -Steuerelement aus der Toolbox in das Formular.
  5. Das Tick -Ereignis des Timer -Steuerelements den folgenden Code hinzufügen:
    if (this.smoothProgressBar1.Value > 0){
    this.smoothProgressBar1.Value--;
    this.smoothProgressBar2.Value++;
    }
    else
    {
    this.timer1.Enabled = false;
    }

  6. Ziehen Sie ein Button -Steuerelement aus der Toolbox in das Formular.
  7. Das Click -Ereignis des Button -Steuerelements folgenden Code hinzufügen:
    this.smoothProgressBar1.Value = 100;this.smoothProgressBar2.Value = 0;

    this.timer1.Interval = 1;
    this.timer1.Enabled = true;

  8. Klicken Sie im Menü Debuggen auf Starten , um das Beispielprojekt auszuführen.
  9. Klicken Sie auf die Schaltfläche. Beachten Sie, dass die zwei Statusanzeigen zeigen den Text "Progress" angezeigt. Eine Statusanzeige zeigt den Fortschritt zu erhöhen und die anderen Statusanzeige zeigt den Fortschritt absteigend oder einen Countdown.
Eigenschaften

Artikelnummer: 323116 – Letzte Überarbeitung: 16.01.2017 – Revision: 2

Feedback