我正在使用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();
}
}
答案 0 :(得分:0)
您可以使用Value Changed事件代替Key Up事件,该事件会在值发生变化时触发。使用键盘输入值时,按Enter键后会触发值更改事件。
我试过了。它对我有用。
您的计算中可能会得到负值。因此,请根据计算值的范围设置NumericUpDown控件的最小和最大属性。
在您的代码中,我还注意到您有两个控件的事件。在这种情况下,您正在更改其他控件的值。为什么要这么做?这将导致两个事件一个接一个地触发。