using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace IP_HULK
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
int n1, n2, n3, n4;
if (numbox1.Text == "" || numbox2.Text == "" || numbox3.Text == "" || numbox4.Text == "")
{
MessageBox.Show("el ip fadi");
}
n1 = Convert.ToInt16(numbox1.Text);
n2 = Convert.ToInt16(numbox2.Text);
n3 = Convert.ToInt16(numbox3.Text);
n4 = Convert.ToInt16(numbox4.Text);
if ((n1 > 0 && n1 < 255) && (n2 > -1 && n2 < 255) && (n3 > -1 && n3 < 255) && (n4 > -1 && n4 < 255))
MessageBox.Show("The IP is Valid");
else
MessageBox.Show("The ip isn't valid");
}
private void textBox1_TextChanged_1(object sender, EventArgs e)
{
}
private void numbox1_Leave(object sender, EventArgs e)
{
}
}
}
答案 0 :(得分:1)
您需要使用else
声明。您的逻辑表明,如果文本框为空,则显示一条消息。一旦用户关闭MessageBox,您的程序将尝试转换文本框值,无论它们是否为空。
举个例子:
int n1, n2, n3, n4;
if (numbox1.Text == "" || numbox2.Text == "" || numbox3.Text == "" || numbox4.Text == "")
{
MessageBox.Show("el ip fadi");
}
else
{
n1 = Convert.ToInt16(numbox1.Text);
n2 = Convert.ToInt16(numbox2.Text);
n3 = Convert.ToInt16(numbox3.Text);
n4 = Convert.ToInt16(numbox4.Text);
}
但是,您最好将其拆分为一个将为您执行验证的方法。作为附加说明,可以使用int.TryParse
而不是Convert
和string.IsNullOrWhiteSpace
,这可能更具可读性。
if (string.IsNullOrWhiteSpace(numbox1.Text))
{
}
答案 1 :(得分:0)
int n1, n2, n3, n4;
if (!Int32.TryParse(numbox1.Text, out n1) || !Int32.TryParse(numbox2.Text, out n2) ||
!Int32.TryParse(numbox3.Text, out n3) || !Int32.TryParse(numbox4.Text, out n4))
{
MessageBox.Show("el ip fadi");
return;
}
使用TryParse
代替,因为如果输入的数据无效,不会崩溃。相反,它只返回true
或false
(和&#34;返回&#34;转换的值为out
参数)。
此外,由于转换值的其余代码出现在&#34;行&#34;使用该方法的其余部分,它会在您MessageBox
出现后继续执行。您可以将方法的其余部分包含在Darren发布的else
块中,或者只是return
显示MessageBox
,就像我在此处所做的那样。
另外,你没有将文本框留空#34;你把它留空了。 null
和String.Empty
不相同。