设置进度条超过100%C#

时间:2011-11-24 17:29:11

标签: c# oop progress-bar

我第一次在c#中使用 ProgressBar 。 我们的想法是在简单的游戏中使用 ProgressBar 作为健康栏。 事情是我认为条形图的最大值是100%,但我想给它一个更高的值,比如让我们说1000%,或者不确定是否可能,给条形码一个整数值而不是一个百分比。

    progressBar1.Increment(100);

这是我将健康状况初始化为100个点的地方。即使我使用这种语法:

    progressBar1.Increment(1000);

我减去:

    progressBar1.Increment(-25);

玩家正在失去1/4的生命,好像他只有100点生命值。 知道如何更改最大条形值吗? 提前致谢。

8 个答案:

答案 0 :(得分:5)

你应该有另一个保持玩家健康状况的变量。将健康数据存储在控件中并不是一个好主意。

您可以执行以下操作:

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

然后更新变量actualHealth,该变量可能超过100的最大控制范围。然后您可以更改控件的样式或其他可视元素以显示播放器被“缓冲”。

答案 1 :(得分:3)

您尚未说明您是使用Windows窗体,WPF还是其他内容,但大多数进度条允许您指定最大值和最小值。听起来并不是你想要1000 ,只是最大值1000。

有关Windows窗体示例,请参阅ProgressBar.Maximum

然而,我首先不会亲自使用ProgressBar。它不是进展 - 如果你只想要一个绘制条形的控件,然后找到或写一个。如果用户看到的是 progress 栏,但实际上只是一个监控栏,表明当前的健康状况等,他们可能会感到困惑。

(正如Tim所说,我也不会使用控件作为玩家状态的真相来源。我可能不会将 display 代码放在同一个类中玩家“模型”代码,但这是一个单独的问题。)

答案 2 :(得分:2)

只需将进度条的最大值设置为您想要的任何值即可。在属性窗口或代码中。

progressBar1.maximum = 7331;

答案 3 :(得分:2)

您可以这样做:

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));

答案 4 :(得分:1)

答案为时已晚,但也许这个答案对某些人有用。此代码用于未知的最大值。我的意思是,当你不知道价值多少时,这可以帮助你。

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

此代码适用于某些操作,例如将许多文件拖到列表框对象或其他...

我希望这对你有用和有用。祝你好运:)

答案 5 :(得分:0)

我假设当玩家获得某种力量提升时你想让健康值大于100%,但是这个奖励健康状况并没有出现在健康栏中,只有0到100%。

请勿将进度条位置属性用作播放器运行状况的源数据。它仅限于进度条的范围,因此根本不适合该任务。

相反,使用一个不同的变量来维持玩家的健康状况。此值可以超过100,但是当您更新进度条位置时,会将其剪切到进度条的范围内。

最重要的信息,这是真的重要,是你需要摆脱使用视觉控件来存储状态的习惯。将状态存储在模型对象中,并根据模型中的状态更新视图。

答案 6 :(得分:0)

你仍然可以使用进度条的最小 - 最大百分比值,同时保持自己的值不在其中。

然后您可以将添加/减少转换为百分比值。

答案 7 :(得分: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();
}