2016-09-18 38 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屬性爲您執行驗證,但我不明白爲什麼其他方法可能有用。 –