進捗バーを100%以上に設定するC#

C#で ProgressBar を使用しています。 このアイデアは、簡単なゲームで ProgressBar をヘルスバーとして使用することです。 私はバーの最大値が100%だと思いますが、1000%と言うよりも高い値を与えたいと思っています。もし可能であれば、バーにはパーセンテージではなく整数値を与えます。

    progressBar1.Increment(100);

ここで私は健康状態を100ポイントに初期化します。この構文を使用しても:

    progressBar1.Increment(1000);

そして、私は以下を引いた:

    progressBar1.Increment(-25);

プレイヤーは、彼が100ヘルスポイントしか持たないかのように、人生の1/4を失っています。 どのように私は最大バー値を変更することができますどのような考え? 前もって感謝します。

2
Windowsフォーム申し訳ありませんが情報を忘れました
追加された 著者 phadaphunk,
ProgressBar.Maximumプロパティを使用します。
追加された 著者 Hans Passant,
WPFまたはWindowsフォーム?
追加された 著者 Tim Rogers,

8 答え

プレーヤーの健康を保持する別の変数が必要です。健康データをコントロールの中に単に格納することは良い考えではありません。

あなたは以下を行うことができます:

progressBar1.Value = Math.min(100, actualHealth);

最大制御範囲100を超える可能性のある actualHealth 変数を更新します。次に、コントロールのスタイルや別のビジュアルエレメントを変更して、プレーヤーが「buffed」であることを示すことができます。

5
追加された
私はこのアイデアは本当に好きですが、私はその言語ではまったく新しいものなので、更新された健康変数をバーの進捗状況にどのように関連付けるのでしょうか?
追加された 著者 phadaphunk,
それは数学のclass.minの方法です。私は実際にはあまり使われていませんが、あなたはその方法を指摘したので、私は詳細情報のために医者を読むつもりです。おかげさまでティム
追加された 著者 phadaphunk,
@PhaDaPhunk:最初に actualHealth 変数を設定し(例: actualHealth - = 25 )、プログレスバーを更新します( progressBar1.Value = Math.min 100、actualHealth); )。
追加された 著者 Tim Cooper,

Windowsフォーム、WPFなどを使用しているかどうかは言いませんが、ほとんどのプログレスバーで最大値と最小値を指定できます。あなたが1000 パーセントを望むのではないように思えます。最大値は1000だけです。

ProgressBar.Maximum を参照してください。

However, I wouldn't personally use a ProgressBar for this in the first place. It isn't progress as such - if you just want a control that draws a bar, then find or write one. If users see what looks like a progress bar but which is actually just a monitoring bar indicating the current health etc, they'll understandably get confused.

(Timが指摘したように、私はプレーヤーの状態に関する真実のソースとしてコントロールを使用しませんでした。おそらく display コードをプレーヤーのモデルと同じクラスに入れないでしょう"コードのどちらかですが、それは別の問題です)。

3
追加された
@PhaDaPhunk:いいえ - パーセンテージではなく絶対値を変更します。 ProgressBar.Incrementのドキュメントを読むことをお勧めします。 msdn.microsoft.com/en-us/library/… - ここではパーセンテージについては何も言及していません。
追加された 著者 Jon Skeet,
ありがとう、私はWindowsフォームを使用していますが、私は1000の最大値にプロパティを設定しています。インクリメント(-25)は-25整数値または1000の25%ですか?
追加された 著者 phadaphunk,
さて、私はそれについて考えて、私はその "パーセンテージ"アイデアをどこに持っているのか分かりませんが、助けてくれたティムとジョンに感謝します
追加された 著者 phadaphunk,
@PhaDaPhunk:現在の値よりも25少ない(25%少ない)。
追加された 著者 Tim Cooper,

たとえば、次のようにすることができます。

progressBar1.Maximum = 700;

そして、あなたがこれをするとき:

progressBar1.Increment(-25);

あなたはこれをするつもりです

700-25

しかし、あなたが25%を減算したいのであれば、これを簡単に行うことができます。

int a = 700;

prograssBar1.Maximum = a;

//When you'd like to subtract the 25% insert this:
progressBar1.Increment(-a/(100/25));
2
追加された

プログレスバーの最大値をあなたが望むものに設定するだけです。プロパティウィンドウまたはコードのいずれか。

progressBar1.maximum = 7331;
2
追加された

答えが遅すぎるかもしれませんが、この答えは誰かにとって役に立ちます。このコードは、未知の最大値です。あなたがどれだけ価値を持っているかわからないとき、これはあなたを助けることができます。

int percent = (int)(Convert.ToDouble(MaximumValue) > 0 ? (100 - (float)(Convert.ToDouble(Value)/Convert.ToDouble(MaximumValue)) * 100d) : 100);

このコードは、リストボックスオブジェクトなどに多くのファイルをドラッグするような操作のためのものです...

私はこれがあなたにとって有用で役立つことを願っています。がんばろう :)

1
追加された

私は、プレイヤーが何らかのパワー増強を得たときに健康を100%以上にすることを許可したいと考えていますが、このボーナスヘルスは0から100%までしか動かないヘルスバーには表示されません。

進行状況バーの位置プロパティをプレーヤーの健康状態のソースデータとして使用しないでください。プログレスバーの範囲に制限されているため、タスクには適していません。

代わりに、別個の変数を使用してプレーヤーの健康状態を維持します。この値は100を超えることができますが、プログレスバーの位置を更新すると、進行状況バーの範囲にクリップされます。

最も重要なメッセージは、本当に重要です。視覚的なコントロールを使用して状態を保存する習慣から抜け出す必要があることです。状態をモデルオブジェクトに格納し、モデルの状態に基づいてビューを更新します。

0
追加された

プログレスバーの最小 - 最大パーセンテージ値をそのまま使用しながら、自分の値を外部に維持することができます。

その後、追加/サブタイズをパーセンテージ値に変換することができます。

0
追加された

最初に設定する必要があります:

progressBar1.Maximum = 1000;
progressBar1.Minimum = 0;

次に、ステップを設定するか、手動でその値を定義することができます。

1) progressBar1.Step = 500;
2) progressBar1.Value = 500;

1)に行くなら、.PerformStep()を呼び出すべきです。

private void button1_Click(object sender, EventArgs e)
{
    progressBar1.PerformStep();
}
0
追加された