我正在尝试使用C#WFA中的进度栏。 我的代码有效,但是进度栏的最小值不正确。仅当我先输入最大值而不是最小值时才有效。 当我第一次输入最小值时,每次我都不知道为什么从0开始。 有什么想法吗?
private void textBoxWartosc_TextChanged(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBoxWartosc.Text))
{
}
else
if ((Convert.ToInt32(textBoxWartosc.Text)) >= (Convert.ToInt32(textBoxMin.Text)) && (Convert.ToInt32(textBoxWartosc.Text)) <= (Convert.ToInt32(textBoxMax.Text)))
{
int i = Convert.ToInt32(textBoxWartosc.Text);
progressBar1.Value = i;
}
}
private void textBoxMax_TextChanged(object sender, EventArgs e)
{
int i = Convert.ToInt32(textBoxMax.Text);
progressBar1.Maximum = i;
}
private void textBoxMin_TextChanged(object sender, EventArgs e)
{
int i = Convert.ToInt32(textBoxMin.Text);
progressBar1.Minimum = i;
}
答案 0 :(得分:0)
首先让我们看一下ProgressBar的行为。主要规则是,最小值将始终小于或等于。因此,如果您将最大值更改为小于最小值的值,那么您也在更改最小值。清楚吗?
所以,我想情况就是这样:首先,您将最小值更改为可以说120的值,您将拥有:
minumum = 120 , maximum = 120 // maximum also changes from 100 to 120 based on the rule
然后,您尝试输入最大金额,例如180
,但是TextChanged
事件被调用了3次。首先,一旦您插入"1"
,您将拥有:
minimum = 1 , maximum = 1 // minimum also changes because 1 is less than 100
第二,当您输入"8"
时,现在您将拥有:
minimum = 1 , maximum = 18 // now minimum stays 1
,然后当您输入最终的"0"
时,最终情况将是:
minimum = 1 , maximum = 180
有很多方法可以解决此问题,但我建议
1:您使用Leave
事件而不是TextChanged
或2:在此处放置一个Save
按钮,仅在按下按钮时更改更改值。