例如,我在“进度条组”中有3个进度条彼此相邻。如果将进度条组的进度设置为50%,则第一个进度条将为满,第二个进度条将为半满,而第三个进度条将保持不变。
我知道这与数学和分数有关,但是我已经花了好几个小时思考这个问题,我不知道这样做的好方法。
我在上面提供的详细信息实际上并不是我真正的问题,它只是用来帮助您更好地了解我的情况。这是真实的东西:
因此,通过查看该图像,您可能可以立即获得我正在尝试做的事情。如果您碰巧有一些与此相关的代码,请共享它。如果您不这样做,那就不要浪费时间在我身上,而要告诉我一般的想法。
答案 0 :(得分:1)
以下课程可能对您有用:
public class JoinedProgressBar
{
private List<ProgressBar> _progressBars;
public JoinedProgressBar(List<ProgressBar> progressBars)
{
_progressBars = progressBars ?? new List<ProgressBar>();
}
public void UpdateBarsPercent(int value)
{
UpdateBars(value * GetSum() / 100);
}
public void UpdateBars(int value)
{
var remaining = value;
for(int i = 0; i < _progressBars.Count; i++)
{
_progressBars[i].Value =
remaining <= _progressBars[i].Minimum ? _progressBars[i].Minimum :
remaining >= _progressBars[i].Maximum ? _progressBars[i].Maximum : remaining;
remaining -= _progressBars[i].Maximum;
}
}
public int GetSum()
{
var bars = _progressBars.Select(pb => pb.Maximum).ToList();
return bars.Count > 0 ? bars.Sum() : 0;
}
public void SetOverallMaximum(int maximum)
{
for (int i = 0; i < _progressBars.Count; i++)
{
_progressBars[i].Minimum = 0;
_progressBars[i].Maximum = maximum / _progressBars.Count;
}
}
}
样品用量:
var jpb = new JoinedProgressBar(new List<ProgressBar>() { progressBar1, progressBar2, progressBar3 });
for(int i = 0; i <= 100; i += 10)
{
jpb.UpdateBarsPercent(i);
await Task.Delay(1000);
}