C#进度栏最小值未从文本框中更新

时间:2018-12-29 16:30:01

标签: c# progress-bar windows-forms-designer

我正在尝试使用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;
    }

1 个答案:

答案 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按钮,仅在按下按钮时更改更改值。