視覚 C# の円滑な進行状況バーを作成する方法

文書翻訳 文書翻訳
文書番号: 323116
マイクロソフトの Visual Basic では。この資料のバージョンを NET を参照してください。 323088.
すべて展開する | すべて折りたたむ

目次

概要

この資料で、簡単なカスタムを作成する方法を示しています。 ユーザー コントロール 滑らかなを作成するのにスクロール プログレス バー コントロールです。

以前のバージョンのでは プログレス バー Microsoft Windows コモン コントロール ActiveX コントロールでは、2 つの異なるビューで進行状況を表示することができます提供されるバージョンなどのコントロールです。これらのビューを制御するを使用して、 スクロール プロパティは、標準および滑らかな設定が含まれています。スムーズ スクロールの進行状況を表す色を純色のブロックを生成および標準スクロール分割が表示され、一連の小さなブロックまたは四角形で構成されています。

は、 プログレス バー Microsoft Visual C# に含まれているコントロールは、標準的な設定だけをサポートしています。

この資料のサンプル コードは、次のプロパティをサポートするコントロールを作成する方法を示しています。
  • 最小値.このプロパティを取得または進行状況の有効な値の範囲は下位の値を設定します。このプロパティの既定値はゼロ (0); です。負の値にこのプロパティを設定することはできません。
  • 最大値.このプロパティを取得または進行状況の有効な値の範囲の上限値を設定します。このプロパティの既定値は 100 です。
  • .このプロパティを取得するか現在の進行状況のレベルを設定します。値が範囲内にする必要がありますが、 最小値 および 最大値 プロパティを定義します。
  • ProgressBarColor.このプロパティを取得または、進行状況バーの色を設定します。

プログレス バーのカスタム コントロールを作成します。

  1. Visual C# で、新しい Windows コントロール ライブラリ プロジェクトを作成するのには、次の手順を実行します。
    1. Microsoft Visual Studio を起動します。
    2. で、 ファイル メニューのポイント 新しい、し プロジェクト.
    3. で、 新しいプロジェクト ダイアログ ボックス、クリックして Visual C# 下にあります。 [プロジェクトの種類、し Windows フォーム コントロール ライブラリ 下にあります。 テンプレート.

      メモ Visual Studio で。NET 2003、クリックしてください Visual C# プロジェクト 代わりに Visual C#.
    4. で、 名前 ボックスの種類 SmoothProgressBar、し [OK].
    5. プロジェクト エクスプ ローラーで、[UserControl1.cs を既定クラス モジュールには、SmoothProgressBar.cs の名前を変更します。
    6. [プロパティ] ウィンドウには、 ユーザー コントロール オブジェクトに、変更を 名前 プロパティ UserControl1 するには SmoothProgressBar.
  2. この時点では、通常からそのコントロールのクラスを継承し、既存のコントロールを拡張するのには、追加の機能を追加します。ただし、 プログレス バー クラスです。 シール 継承はできません。したがって、コントロールを最初から作成する必要があります。

    UserControl から派生したクラスで、SmoothProgressBar.cs ファイルには、次のコードを追加します。

    メモ Visual Studio で。NET 2003、だけで、「Windows フォーム デザイナーで生成されたコード」セクションの後の派生した UserControl クラスをクラス モジュールにコードを追加します。
    int min = 0;	// Minimum value for progress range
    int 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. で、 ビルド メニューをクリックして ソリューションをビルドします。 プロジェクトをコンパイルします。

サンプル クライアント アプリケーションを作成します。

  1. で、 ファイル メニューのポイント 新しい、し プロジェクト.
  2. で、 新しいプロジェクトを追加します。 ダイアログ ボックス、クリックして Visual C# 下にあります。 [プロジェクトの種類をクリックして Windows フォーム アプリケーション 下にあります。 テンプレート、し [OK].

    メモ Visual Studio で。NET 2003、クリックしてください Visual C# プロジェクト 代わりに Visual C#.
  3. 2 つのインスタンスを追加するのには、次の手順に従って、 SmoothProgressBar フォームを制御します。
    1. で、 ツール メニューをクリックして [ツールボックス アイテムを選択します。.

      メモ Visual Studio で。NET 2003、クリックしてください [ツールボックスをカスタマイズします。 代わりに [ツールボックス アイテムを選択します。.
    2. クリックして、 .NET フレームワーク コンポーネント タブします。
    3. クリックしてください。 参照、し、作成した SmoothProgressBar.dll ファイルを探します、"プログレス バーのカスタム コントロールを作成します。」に記載します。
    4. クリックしてください。 [OK].注意してください、 SmoothProgressBar コントロールがツールボックスに追加されます。
    5. 2 つのインスタンスをドラッグして、 SmoothProgressBar [ツールボックス] から、Windows アプリケーション プロジェクトの既定のフォームを制御します。
  4. ドラッグします。 タイマー [ツールボックス] からフォームに制御します。
  5. 次のコードを追加、 チェック マーク イベント、 タイマー コントロール:
    if (this.smoothProgressBar1.Value > 0)
    {
    	this.smoothProgressBar1.Value--;
    	this.smoothProgressBar2.Value++;
    }
    else
    {
    	this.timer1.Enabled = false;
    } 
    					
  6. ドラッグします。 ボタン [ツールボックス] からフォームに制御します。
  7. 次のコードを追加、 クリックしてください。 イベント、 ボタン コントロール:
    this.smoothProgressBar1.Value = 100;
    this.smoothProgressBar2.Value = 0;
    			
    this.timer1.Interval = 1;
    this.timer1.Enabled = true; 
    					
  8. で、 デバッグ メニューをクリックして 開始 サンプル プロジェクトを実行します。
  9. ボタンをクリックします。2 つの進行状況インジケーターが「作業中」というテキストを表示することに注意してください。1 つの進行状況インジケーターが増加の方法では、進行状況を表示し、他の進行状況インジケーターが減少またはカウント ダウン方法で進行状況を表示します。

プロパティ

文書番号: 323116 - 最終更新日: 2011年7月27日 - リビジョン: 6.0
キーワード:?
kbhowtomaster kbsweptvs2008 kbmt KB323116 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:323116
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com