我通过表单中的文本框接受来自用户的字符串值。然后在对数据库表的查询中使用它,尽管它是一个字符串,但我要求输入的唯一字符是整数。
我尝试了各种方法,如INT32
和TryParse
函数。然而,当我尝试IF ELSE
或TRY CATCH
阻止任何事情执行时,我遇到了问题,直到输入是"可接受的"。
允许只在文本框中输入整数,或者识别除整数以外的任何数字并使执行失败,最简单的方法是什么?
是的,您可以使用int.TryParse
:
string selectSql = "SELECT * FROM SomeTable WHERE ID = @ID";
int id;
if (!int.TryParse(txtID.Text, out id))
MessageBox.Show("ID must be an integer.");
else
{
using (var myCon = new SqlConnection(connectionString))
using (var selectCommand = new SqlCommand(selectSql, myCon))
{
selectCommand.Parameters.AddWithValue("@ID", id);
myCon.Open();
using (var reader = selectCommand.ExecuteReader())
{
// do something with the records
}
}
}
您也可以使用NumericUpDown
控件
使用NumericUpDown控件代替TextBox
我知道有三种可能的方法:
-
删除文本框TextChanged事件中的无效字符:
private void txb_TextChanged(object sender, EventArgs e) { int selStart = txb.SelectionStart; string result = txb.Text; // remove all that aren't digits result = Regex.Replace(result, @"[^0-9]", string.Empty); txb.Text = result; // move cursor if (selStart > txb.Text.Length) txb.Select(txb.Text.Length, 0); else txb.Select(selStart, 0); }
-
扩展文本框控件并忽略用户按下的所有无效键
public class IntegerTextBox : TextBox { private Keys[] int_allowed = { Keys.D1, Keys.D2, Keys.D3, Keys.D4, Keys.D5, Keys.D6, Keys.D7, Keys.D8, Keys.D9, Keys.D0, Keys.NumPad0, Keys.NumPad1, Keys.NumPad2, Keys.NumPad3, Keys.NumPad4, Keys.NumPad5, Keys.NumPad6, Keys.NumPad7, Keys.NumPad8, Keys.NumPad9, Keys.Back, Keys.Delete, Keys.Tab, Keys.Enter, Keys.Up, Keys.Down, Keys.Left, Keys.Right }; protected override void OnKeyDown(KeyEventArgs e) { base.OnKeyDown(e); if (e.Modifiers == Keys.Control) return; if (!int_allowed.Contains(e.KeyCode)) { e.SuppressKeyPress = true; } } } }
-
处理KeyDown和/或KeyPress事件,并取消它,如果不允许的东西被按下
你可以自己写一个继承自TextBox的类:
public class NumericTextBox : TextBox
{
protected override void OnKeyPress(KeyPressEventArgs e)
{
base.OnKeyPress(e);
var key = e.KeyChar + "";
if (key == "b")
return;
double number;
string newText = Text.Remove(SelectionStart, SelectionLength).Insert(SelectionStart, key);
if (newText.Length == 1 && key == "-")
return;
if (!double.TryParse(newText, NumberStyles.Float, CultureInfo.InvariantCulture, out number))
{
e.Handled = true;
}
}
public double Value
{
get { return Text.Length == 0 ? 0 : double.Parse(Text, CultureInfo.InvariantCulture); }
}
}
可以使用textbox的TextChanged事件。
int。每次修改值时尝试解析文本,如果不工作,只需清除文本框(或保留最后一个工作的值,并在失败时恢复到该值)。