文本框以接受整数
本文关键字:整数 文本 | 更新日期: 2023-09-27 18:35:17
我通过这个网站找到了不同的帮助,但似乎仍然无法将字符串转换为 int。我尝试了许多不同的方法。这是其中的两个。在button_click我需要阅读文本框并将它们转换为 int,以便我可以对它们执行标准逻辑。(a> b 函数)。第一部分下面是我用来在输入文本框时强制使用数字的内容。
private void write_button_Click(object sender, EventArgs e)
{
int mat_od1 = int.Parse(matod_box.Text); //Input string in wrong format.
int mat_id1 = int.Parse(matid_box.Text);
int fod1 = int.Parse(fod_box.Text);
int fid1 = int.Parse(fid_box.Text);
int hp1 = int.Parse(hp_box.Text);
//This next section is just to show something else I've tried.
decimal mat_od = Convert.ToDecimal(matod_box.Text); //Same error.
decimal mat_id = Convert.ToDecimal(matid_box.Text);
decimal fod = Convert.ToDecimal(fod_box.Text);
decimal fid = Convert.ToDecimal(fid_box.Text);
decimal hp = Convert.ToDecimal(hp_box.Text);
decimal pass_od = mat_od;
}
private void fod_box_TextChanged(object sender, EventArgs e)
{
try
{
int numinput = int.Parse(fod_box.Text);
if (numinput < 1 || numinput > 500)
{
MessageBox.Show("You must enter a number between 0 and 500.");
}
}
catch (FormatException)
{
MessageBox.Show("You need to enter a number.");
fod_box.Clear();
}
任何帮助将不胜感激。
而不是int.Parse()
你应该使用int.TryParse(string,out int)
这样,您就可以检查输出并确定字符串是否正确解析
int i;string s="";
if(int.TryParse(s,out i))
{
//use i
}
else
{
//show error
}
int.parse 转换应该可以工作,如以下示例所示:
string s = "111";
int i;
if (int.TryParse(s, out i))
{
Console.Write(i);
}
else
{
Console.Write("conversion failed");
}
你确定你真的为你的ints提供了法律意见吗?在任何情况下,您都应该像我在示例中所做的那样使用 TryParse。没有必要使用try..抓住可以使用框架提供的布尔方法的地方,这将得到相同的结果。
一切都取决于您允许在文本框中放置的内容。
如果它可能不是可以转换为整数的字符串,包括空白,那么类似
int value;
if (int.TryParse(SomeString, out value)
{
// it is an int
}
else
{
// it's not an int, so do nothing raise a message or some such.
}
除了像其他人指出的那样在按钮单击事件处理程序中使用Int32.TryParse
之外,还需要小心在 TextBox Changed
事件处理程序中执行的操作。 你的代码在这里是有缺陷的:
private void fod_box_TextChanged(object sender, EventArgs e)
{
try
{
int numinput = int.Parse(fod_box.Text);
...
}
catch (FormatException)
{
MessageBox.Show("You need to enter a number.");
fod_box.Clear();
}
呼叫foo_box。Clear() 将清除文本框中的任何文本,调用 TextChanged 处理程序以再次执行(除非文本框已经为空)。 因此,如果您输入非数字值,您的消息框将显示两次 - 第一次是它尝试解析您的非数字值,第二次是当它尝试解析空字符串作为调用 Clear() 的结果时。
通常,我会避免在 Changed 事件处理程序中进行验证。