【发布时间】:2017-07-05 09:54:30
【问题描述】:
我想创建一个表单,允许用户在五个不同的字段 (NumericUpDown) 中设置一定数量的点。当该点数达到 0 时,用户无法再添加。 (不过,我仍然希望用户能够删除积分。)
到目前为止,这是我的代码:
private void calculateValue() {
decimal tempValue = CMB_num_Aim.Value + CMB_num_Reflexes.Value +
CMB_num_Positioning.Value + CMB_num_Movement.Value + CMB_num_Teamwork.Value;
controlValue = currentValue - tempValue;
MyBox.CMB_tb_cv.Text = controlValue.ToString();
}
这个方法(calculateValue)是计算用户还剩多少点(controlValue)。
private void CMB_num_Aim_ValueChanged(object sender, EventArgs e) {
calculateValue();
if (controlValue < 0) {
//Prevent Default here
MessageBox.Show("You are out of points!");
}
}
此方法 (CMB_num_Aim_ValueChanged) 在 NumericUpDown 控件的值发生更改时触发。每个字段我都有一个,每个都做同样的事情。
该方法按预期触发,但我无法阻止它发生 - 用户可以应用比他们拥有的更多的点。如何防止用户申请更多积分?
(我想过做一个mouseUp方法,但不知道用户是用鼠标还是用键盘输入值。)
【问题讨论】:
-
使用属性将最小金额设置为零
-
您可以通过设置之前的值来阻止,存储之前的值并在 valuechanged 事件中重新设置
-
克里希纳 - 我想过这样做,但我还没有找到可靠的方法来做到这一点,而不会意外地用刚刚触发的那个覆盖我的“oldValue”。
-
在 Tag 属性中保留旧值,这样您就不需要维护变量。只要验证正确,就更新标签属性
-
这听起来与this question 类似的关于 ComboBox 控件的问题。有时提供的控件在功能上有点缺乏,扩展它们可能是一个好方法。
标签: c#