当我将文本框留空时,如何防止程序崩溃

本文关键字:何防止 程序 崩溃 文本 | 更新日期: 2023-09-27 18:21:48

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

当我将文本框留空时,如何防止程序崩溃

您将需要使用else语句。您的逻辑是,如果文本框为空,则显示一条消息。一旦用户关闭MessageBox,您的程序将尝试转换Textbox值,无论它们是否为空。

例如:

    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)) 
{
}
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(并将转换的值作为out参数"返回")。

此外,由于用于转换值的代码的其余部分与方法的其余部分"一致"发生,因此它将在MessageBox出现后继续执行。您可以像Darren发布的那样,将方法的其余部分封装在else块中,也可以像我在这里所做的那样,在显示MessageBox之后简单地封装return

此外,您没有"将文本框留空",而是将其留空。CCD_ 13和CCD_。