2016-09-18 34 views
0

如何限制可以输入到我的NumericUpDown(nudqty)中的max int。我的代码工作时,它会限制使用向下箭头更改它的值,但是当我键入它时不会。建议请告诉我,如果它不可能在NumericUpDown,并将其更改为TextBox限制NumericUpDown值取决于从DataGridView中选择的值

private void dgv1_CellClick(object sender, DataGridViewCellEventArgs e) 
{ 
    lblqty.Text = dgv1.SelectedRows[0].Cells[5].Value.ToString(); 
    nudqty.Maximum = Convert.ToDecimal(lblqty.Text); 
} 

my form

+0

NUD不验证您输入的内容,直到它知道一个事实,即在完成后打字。由于您可能键入“100”并按Backspace键以更正多余的“0”。它可以知道这一事实的唯一途径是当NUD失去焦点时。不可避免地,最大属性值不会被应用,直到您按下添加按钮。解决方法是使用验证事件,而不是设置最大值,让你抱怨。但是,确实,只要确保用户可以轻松纠正购物车中的错误。 –

+0

当控件失去焦点或用户单击向上/向下按钮或用户使用键盘箭头键更改值时,“最大值”适用于控件。并且在所有情况下,当您询问控制的“数值”时,将应用“最大值”,然后将数值返回给您。所以不要担心用户输入的文字。设置'Maximum'属性,如果您使用'Value'属性,则您将始终获得有效值。 –

+0

@HansPassant您可以使用验证向我展示示例代码吗?我不知道如何使用它。 – ItaChi

回答

0

设置的DataGridViewSelectionModeFullRowSelect,然后处理SelectionChanged事件DataGridView。在发现使用CurrentRow值后的事件中,NumericUpDownValue重置为0,并设置其Maximum提取的值:

private void dataGridView1_SelectionChanged(object sender, EventArgs e) 
{ 
    int max = (int)this.dataGridView1.CurrentRow.Cells[5].Value; 
    this.numericUpDown1.Value = 0; 
    this.numericUpDown1.Maximum = max; 
} 
+0

刚刚意识到我的NUD值重置为最大值,即使输入大于最大值的值,我也会将其设置为最大值。如果我没有找到其他解决方案,那么我想我会坚持下去(并标记你的答案)。谢谢。 – ItaChi

+0

当您设置Maximum并读取Value时,您无需担心“Value”。您可能会考虑的所有其他解决方案都需要使用Maximum属性进行验证,而Maximum属性为您执行验证,但我不明白为什么其他方法可能有用。 –