【发布时间】:2015-01-08 02:16:39
【问题描述】:
我正在使用 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();
}
}
【问题讨论】:
标签: c# winforms validation input telerik