c# - 进度条中具有负最小值的 C# 表单
问题描述
我需要显示一个具有负值的进度条,但是当我尝试将值修改为负数时,c# 会出现错误(无效属性错误)。有谁知道创建负值进度条的任何方法?
HPHeroi.Maximum = CriacaoDePersonagem.protagonista.status.Vida;
HPHeroi.Minimum = -20;
解决方案
有谁知道创建负值进度条的任何方法?
你不能。从文档中:
例外
为属性指定的值小于 0。
相反,您需要做的是抵消进度条的整个范围以解释负值。例如:
HPHeroi.Maximum = CriacaoDePersonagem.protagonista.status.Vida + 20;
HPHeroi.Minimum = 0;
然后,当您设置 的当前值时,您还需要考虑这一点ProgressBar
,例如:
HPHeroi.Value = CriacaoDePersonagem.protagonista.status.ActualVida + 20;
上述策略可以封装在UserControl
包装 a 的 a 中ProgressBar
,公开各种与值相关的属性,但使用偏移量来确保实际ProgressBar
对象看不到负值。
例如:
public partial class ProgressBarWithNegativeValues : UserControl, INotifyPropertyChanged
{
private int _offset;
public ProgressBarWithNegativeValues()
{
InitializeComponent();
}
public int Minimum
{
get => progressBar1.Minimum + _offset;
set
{
int offsetChange = value - _offset;
_offset = value;
progressBar1.Maximum -= offsetChange;
_RaisePropertyChanged();
}
}
public int Maximum
{
get => progressBar1.Maximum + _offset;
set
{
progressBar1.Maximum = value - _offset;
_RaisePropertyChanged();
}
}
public int Value
{
get => progressBar1.Value + _offset;
set
{
progressBar1.Value = value - _offset;
_RaisePropertyChanged();
}
}
public int Step
{
get => progressBar1.Step;
set
{
progressBar1.Step = value;
_RaisePropertyChanged();
}
}
public void Increment(int step) => progressBar1.Increment(step);
public void PerformStep() => progressBar1.PerformStep();
public event PropertyChangedEventHandler PropertyChanged;
private void _RaisePropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
我省略了*.Designer.cs
代码,因为这只是一个ProgressBar
放在 上的对象UserControl
,其Dock
属性设置为Fill
.
请注意,上面的ProgressBar.Minimum
属性始终保留为 0,并且其他属性相应地偏移,无论最小值是负数还是正数。这使代码保持美观和简单,而不是试图分别处理消极和积极的情况。
推荐阅读
- math - 3D 空间中声音的多点定位
- php - PHP:将对象解析为 XML(带有属性)
- google-chrome - java.lang.NoSuchMethodError:com.google.gson.GsonBuilder.setLenient()Lcom/google/gson/GsonBuilder;通过 ChromeDriver 启动 Chrome 时
- ios - 替换已经运行的 iOS 应用
- php - PHP 页面 - 缓存问题
- android - 键盘大小调整会剪切按钮的一部分
- java - Spring Boot启动时运行代码
- c++ - 零引用计数,仍然没有分段错误
- html - 控制组标签(非个人控制) - 508 合规性 HTML
- windows - 桌面版 Windows Bridge 无法正确完成进程