アクションにかかる時間がわからず、ダイアログボックスに進行状況バーを表示したいと思っています。私はSystem.Windows.Forms.ProgressBarを使ってみましたが、サポートしていないようです。WinFormsで無限のプログレスバーを作成するにはどうすればよいですか?
インターネット上で新しいドライバを探しているときにウィンドウが表示されるプログレスバーです。プログレスバーに3つまたは4つの 'バー'が前後にマーキースタイルで表示されます。
どうすればいいですか?
アクションにかかる時間がわからず、ダイアログボックスに進行状況バーを表示したいと思っています。私はSystem.Windows.Forms.ProgressBarを使ってみましたが、サポートしていないようです。WinFormsで無限のプログレスバーを作成するにはどうすればよいですか?
インターネット上で新しいドライバを探しているときにウィンドウが表示されるプログレスバーです。プログレスバーに3つまたは4つの 'バー'が前後にマーキースタイルで表示されます。
どうすればいいですか?
ちょうどあなたがここにあなた自身を作ることができ、アニメーションGIF :)
を使用します。 http://www.ajaxload.info/
System.Windows.Forms.ProgressBar
のStyle
プロパティをMarquee
に設定しようとしましたか?
はしかし、驚くべきことに、このプロパティが(MSDNに応じて)次のプラットフォームでのみ使用可能です:
のWindows XP Home Editionを、Windows XPのx64エディションは、Windows Server 2003
マイトそれはドキュメントがVistaに更新されていないということです。誰でもVistaの制限について知っていますか?
編集:別のコメントに掲載されているように、ドキュメントはサポートされているプラットフォームに関して間違っているようです。ビスタだけでなく、Windows上で作業をしなければならないこと7.
は、より良い方法があるかもしれませんが、一つの方法は、それが最後に到達したときだけ
プログラムを実行するたびに私は物理的な痛みを感じます。ユーザビリティのPOVから、これは怠け者のプログラマができる最悪のものの1つです。これは、「プログレスバー」メタファ全体のユーザーにとっての信頼性を損なうものではありません。プログレスバーが全くない方がいいです。 – Tomalak
合意。たぶん進捗情報が得られない長期的なプロセスのための最良の解決策(おそらく疑問が少しはっきりしていた)は、進歩のバーにはならないだろう...しかし、彼は不確かなものを得る方法を尋ねた: ) – Joey
私は希望の効果を誤解したようです。それが私の頭の上から覚えていた唯一の無限のプログレスバーでした。 – Davy8
私はChris Lawlのソリューションが最高で、きれいで、きれいな解決策を見つけました。ちょうどgif http://www.ajaxload.info/が含まれていました。
プログレスバーを終了しないという混乱はありませんか?終了するとマーキーのアニメーションを0に設定し、プログレスバーのVisibleプロパティをfalseに設定します。その魔法はありません。 – Houman
これは私のために働いたものです。私はあなたに不確定なプログレスバーを作成します。あなたは、あなたのソリューションを構築する必要があり、あなたがデザイナーに戻ったときに、新しいコントロールは、ツールボックスにする必要があり
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
namespace AnimatedCustomControls
{
sealed class IndeterminateProgressbar : Control
{
private readonly List<int> positions = new List<int>();
private readonly Timer tmrAnimation = new Timer {Interval = 5, Enabled = false};
private readonly Timer tmrAddPosition = new Timer {Interval = 500, Enabled = true};
public Color ProgressColor { get; set; }
public Color InactiveColor { get; set; }
public IndeterminateProgressbar()
{
DoubleBuffered = true;
SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
ProgressColor = Color.FromArgb(40, 190, 245);
InactiveColor = Color.FromArgb(40, 40, 40);
tmrAnimation.Tick += tmrAnimation_Tick;
tmrAddPosition.Tick += tmrAddPosition_Tick;
if (!DesignMode) tmrAnimation.Start();
}
void tmrAddPosition_Tick(object sender, EventArgs e)
{
positions.Add(1);
}
void tmrAnimation_Tick(object sender, EventArgs e)
{
if (DesignMode) tmrAnimation.Stop();
for (int i = 0; i < positions.Count; i++)
{
positions[i] += 2 + Math.Abs(positions[i])/50;
if (positions[i] > Width) positions.RemoveAt(i);
}
Invalidate();
}
protected override void OnEnabledChanged(EventArgs e)
{
base.OnEnabledChanged(e);
if (Enabled)
{
positions.Clear();
positions.AddRange(new[] { Width/10, Width/3, Width/2, (int)(Width * 0.7) });
}
}
protected override void OnPaint(PaintEventArgs e)
{
if (Enabled)
{
e.Graphics.Clear(BackColor);
foreach (int i in positions)
{
e.Graphics.DrawLine(new Pen(Brushes.Black, 4f), i, 0, i, Height);
}
}
else e.Graphics.Clear(InactiveColor);
base.OnPaint(e);
}
}
}
:プロジェクト/フォームにカスタムコントロールを追加し、このコードを挿入 。フォームにドラッグし、最大値と最小値を設定します。それだけです。
private void Form1_Load(object sender, EventArgs e)
{
indeterminateProgressbar1.BackColor = Color.FromArgb(40, 190, 245); //it's an nice color ;)
indeterminateProgressbar1.Size = new Size(400, 4); //make it small in the height looks better
indeterminateProgressbar1.Visible = true;
}
は、Microsoftが完全に「マーキー」を手放すことができないようだ。
私はあなたがそれを使用する方法を知っているように、サンプルプログラムを作成しました。 :-D – Tomalak
"Windows XP以上"にしてください。私はWindows VistaとWindows 7 Beta(どちらも64ビット)でテストしたところ、うまくいきました。 – Joey
注:これは.NET 2.0以上の機能です。 .NET 1.1ではstyleプロパティが公開されていませんでした。 –