我有一個只接受數字,不接受其他字符的文本框。我keypress為此在方法中創建了以下函式:
private void txtRGIE_KeyPress(object sender, KeyPressEventArgs e)
{
if (!Char.IsDigit(e.KeyChar) && e.KeyChar != (char)8)
{
e.Handled = true;
}
}
輸入時驗證有效,我無法輸入我想要的特殊字符或字母。但是,如果我復制包含點或其他字符的數字字串并將其粘貼到欄位中,則它通常會接受。例如,如果您復制:323.323 / 323 并粘貼到該欄位中,它將被接受。如何驗證我粘貼的字符,只允許數字?
uj5u.com熱心網友回復:
我有一個只接受數字的文本框
這就是缺陷;說“我這里有一把刀,我想用作螺絲刀,但我一直用它割傷自己,所以我把它銼平了,但它太大了,無法進入螺絲孔,所以我把它銼得很小,但是它不能很好地轉動 形螺釘,而且尖端沒有硬化,所以它不斷斷裂……”
答案是使用 形螺絲刀,而不是反復嘗試將一些不是為作業而制造的東西混合成可以完成作業的東西
NumericUpDown 控制元件是完成這項作業的正確工具;它只接受數字,具有可配置的小數位和上限和下限,不能輸入或粘貼字母文本,而且,用戶可以使用向上和向下游標鍵更改值
NUD 是您文本框的替代品,它是免費的,并且是標準庫的一部分,因此無需安裝任何東西 - 只需記住獲取.Value,而不是.Text,并且它是decimal,因此您可能想將其轉換為使用它的其他東西(double?int?)取決于您的應用程式的期望
如果您不喜歡向上的小按鈕,請看這里
uj5u.com熱心網友回復:
您可以使用 :
private void txtRGIE_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) &&
(e.KeyChar != '.'))
{
e.Handled = true;
}
// only allow one decimal point
if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1))
{
e.Handled = true;
}
}
或者您可以使用 NumericUpDown 代替參考此答案,以便您了解更多資訊。
uj5u.com熱心網友回復:
您可以使用MaskedTextBox而不是常規的。
uj5u.com熱心網友回復:
如前所述,NumericUpDown 控制元件是一個不錯的選擇,要使其看起來像一個 TextBox,您可以隱藏向上/向下箭頭,例如
amountNumericUpDown1.Controls[0].Hide();
或者創建一個沒有向上/向下箭頭的自定義版本,在這種情況下,按下回車鍵時沒有蜂鳴聲。
public class SpecialNumericUpDown : NumericUpDown
{
public SpecialNumericUpDown()
{
Controls[0].Hide();
TextAlign = HorizontalAlignment.Right;
}
protected override void OnTextBoxResize(object source, EventArgs e)
{
Controls[1].Width = Width - 4;
}
public delegate void TriggerDelegate();
public event TriggerDelegate TriggerEvent;
protected override void OnKeyDown(KeyEventArgs e)
{
if (e.KeyCode == (Keys.Return))
{
e.Handled = true;
e.SuppressKeyPress = true;
TriggerEvent?.Invoke();
return;
}
base.OnKeyDown(e);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/362224.html
