当我离开文本框时如何防止程序崩溃null c#

时间:2015-11-13 20:07:30

标签: c# .net

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)
        {

        }
    }
}

2 个答案:

答案 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而不是Convertstring.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代替,因为如果输入的数据无效,不会崩溃。相反,它只返回truefalse(和&#34;返回&#34;转换的值为out参数)。

此外,由于转换值的其余代码出现在&#34;行&#34;使用该方法的其余部分,它会在您MessageBox出现后继续执行。您可以将方法的其余部分包含在Darren发布的else块中,或者只是return显示MessageBox,就像我在此处所做的那样。

另外,你没有将文本框留空#34;你把它留空了。 nullString.Empty 相同。