如何在输入值发生变化时验证Telerik的RadSpinEditor

时间:2015-01-08 02:16:39

标签: c# winforms validation input telerik

我正在使用2个RadSpinEditor WinForms控件。当在2中的任何一个中改变一个值时,我计算第二个输入的值。

我遇到的问题是,RadSpinEditor的值可能会根据很多事情而改变(例如,在keyDown上,如果用户使用向上/向下箭头更改了值,或者如果使用类型为非 - 数值,系统自动将其校正为最大值(即99.99))

如何捕获所有这些情况,以确保在价值变化时立即计算它们的价值。

这是我到目前为止所做的事情(问题是它总是不会改变值)

private void InputMargin_KeyUp(object sender, KeyEventArgs e)
{
    double v = 0;
    try
    {
        double margin;
        double.TryParse(InputMarkup.Text, out margin);
        margin /= 100;
        v = Math.Round((margin / (1 + margin)) * 100, 2, MidpointRounding.AwayFromZero);
    }
    catch
    {
        v = 0;
    }
    finally
    {
        InputMarkup.Text = v.ToString();
    }
}

private void InputMarkup_KeyUp(object sender, KeyEventArgs e)
{
    double v = 0;
    try
    {
        double markup;
        double.TryParse(InputMarkup.Text, out markup);
        markup /= 100;
        v = Math.Round((markup / (1 + markup)) * 100, 2, MidpointRounding.AwayFromZero);
    }
    catch
    {
        v = 0;
    }
    finally
    {

        InputMargin.Text = v.ToString();
    }
}

我也做过这个(根本没有计算 - 似乎根本没有触发ValueChanged事件)

private void InputMargin_ValueChanged(object sender, EventArgs e)
{

    double v = 0;
    try
    {
        double margin;
        double.TryParse(InputMarkup.Text, out margin);
        margin /= 100;
        v = Math.Round((margin / (1 + margin)) * 100, 2, MidpointRounding.AwayFromZero);
    }
    catch
    {
        v = 0;
    }
    finally
    {

        InputMarkup.Text = v.ToString();
    }
}

private void InputMarkup_ValueChanged(object sender, EventArgs e)
{

    double v = 0;
    try
    {
        double markup;
        double.TryParse(InputMarkup.Text, out markup);
        markup /= 100;
        v = Math.Round((markup / (1 + markup)) * 100, 2, MidpointRounding.AwayFromZero);
    }
    catch
    {
        v = 0;
    }
    finally
    {

        InputMargin.Text = v.ToString();
    }
}

1 个答案:

答案 0 :(得分:0)

您可以使用Value Changed事件代替Key Up事件,该事件会在值发生变化时触发。使用键盘输入值时,按Enter键后会触发值更改事件。

我试过了。它对我有用。

您的计算中可能会得到负值。因此,请根据计算值的范围设置NumericUpDown控件的最小和最大属性。

在您的代码中,我还注意到您有两个控件的事件。在这种情况下,您正在更改其他控件的值。为什么要这么做?这将导致两个事件一个接一个地触发。