DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

ProgressBarが縮む時も徐々に縮むようにする

Windows Vista以降では、ProgressBarの値を増やした時はバーが徐々に伸びていきます。しかし、ProgressBarの値を減らした時はバーが一気に縮みます。ここでは、ProgressBarの値を減らした時でもバーが徐々に縮むようなアニメーション表示がされるようにする方法を紹介します。

バーが徐々に縮むProgressBar

バーが徐々に縮むようにするには、プログレスバーコントロールのスタイルに「PBS_SMOOTHREVERSE」を追加します。そのためには、ProgressBarクラスを継承したクラスを作成して、CreateParamsメソッドをオーバーライドします。そして、そのクラスをProgressBarコントロールの代わりに使用するようにします。

以下にその例を示します。もしこのクラスをProgressBarコントロールの代わりに使用する方法が分からないという場合は、こちらをご覧ください。

VB.NET
コードを隠すコードを選択
Imports System.Windows.Forms
Imports System.Security.Permissions

''' <summary>
''' バーが縮む時も徐々に縮むProgressBarコントロールを表します。
''' </summary>
Public Class SmoothProgressBar
    Inherits ProgressBar
    Private PBS_SMOOTHREVERSE As Integer = &H10

    Protected Overrides ReadOnly Property CreateParams() As CreateParams
        <SecurityPermission(SecurityAction.Demand, _
            Flags:=SecurityPermissionFlag.UnmanagedCode)> _
        Get
            Dim cps As CreateParams = MyBase.CreateParams
            'コントロールのスタイルにPBS_SMOOTHREVERSEを追加する
            cps.Style = cps.Style Or PBS_SMOOTHREVERSE
            Return cps
        End Get
    End Property
End Class
C#
コードを隠すコードを選択
using System;
using System.Windows.Forms;
using System.Security.Permissions;

/// <summary>
/// バーが縮む時も徐々に縮むProgressBarコントロールを表します。
/// </summary>
public class SmoothProgressBar : ProgressBar
{
    private int PBS_SMOOTHREVERSE = 0x0010;

    protected override CreateParams CreateParams
    {
        [SecurityPermission(SecurityAction.Demand,
            Flags = SecurityPermissionFlag.UnmanagedCode)]
        get
        {
            CreateParams cps = base.CreateParams;
            //コントロールのスタイルにPBS_SMOOTHREVERSEを追加する
            cps.Style |= PBS_SMOOTHREVERSE;
            return cps;
        }
    }
}

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。