我通过这个网站找到了不同的帮助,但似乎仍无法将字符串转换为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();
}
任何帮助都将不胜感激。
答案 0 :(得分:4)
而不是int.Parse()
您应该使用int.TryParse(string,out int)
通过这种方式,您可以轻松输出输出并判断字符串是否正确解析
int i;string s="";
if(int.TryParse(s,out i))
{
//use i
}
else
{
//show error
}
答案 1 :(得分:2)
int.parse转换应该有效,如下例所示:
string s = "111";
int i;
if (int.TryParse(s, out i))
{
Console.Write(i);
}
else
{
Console.Write("conversion failed");
}
您确定实际为您的整体提供法律意见吗?无论如何,你应该像我在我的样本中那样使用TryParse。没有必要使用try..catch,你可以使用框架提供的布尔方法,这将得到相同的结果..
答案 2 :(得分:1)
全部取决于您允许放在文本框中的内容。
如果它可能不是可以转换为整数的字符串,包括空白,那么
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.
}
答案 3 :(得分:0)
除了在其他人指出的按钮Click事件处理程序中使用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处理程序再次执行(除非TextBox已经为空)。因此,如果输入非数字值,则消息框将显示两次 - 第一次尝试解析非数字值时,第二次尝试解析空字符串时因调用清除()。
通常,我会避免在Changed事件处理程序中进行验证。