c#:从字符串到日期时间转换时的未处理异常

本文关键字:转换 未处理 异常 时间 日期 字符串 | 更新日期: 2023-09-27 18:03:43

我正在尝试编写一个简单的GUI应用程序,当单击检索按钮时,将从customer类加载客户数据。当单击save按钮时,这些数据将存储在Customer对象中。

我发现通过测试,我的清除和检索按钮工作如预期,但我收到以下错误消息,当我按下保存按钮:

应用程序中发生了未处理的异常。如果单击Continue,应用程序将忽略此错误并尝试继续。如果您点击退出,应用程序将立即关闭。

该字符串未被识别为有效的日期时间。从索引4开始有一个未知单词

我把我的代码粘贴在下面。如果你们能提供任何澄清,我将不胜感激。提前感谢!

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 simple_GUI
{
    public partial class Form1 : Form
    {
        Customer myCustomer = new Customer(); //Declare an instance of the customer class within my Windows form
        public Form1()
        {
            InitializeComponent();
        }
        private void saveButton_Click(object sender, EventArgs e)
        {
            myCustomer.Id = Convert.ToInt32(customerIDTextBox.Text); //How to handle exceptions within my conversions?
            myCustomer.Name = fullNameTextBox.Text;
            myCustomer.Address = addressTextBox.Text;
            myCustomer.Email = emailTextBox.Text;
            myCustomer.Phone = Convert.ToDouble(phoneNumberTextBox.Text);
            myCustomer.AddDate = Convert.ToDateTime(addressTextBox.Text);
            myCustomer.TotalTransactions = Convert.ToInt32(totalTransactionsTextBox.Text);

        }
        private void retrieveButton_Click(object sender, EventArgs e)
        {
            customerIDTextBox.Text = Convert.ToString(myCustomer.Id); 
            fullNameTextBox.Text = myCustomer.Name;
            addressTextBox.Text = myCustomer.Address;
            emailTextBox.Text = myCustomer.Email;
            phoneNumberTextBox.Text = Convert.ToString(myCustomer.Phone);
            addDateTextBox.Text = Convert.ToString(myCustomer.AddDate);
            totalTransactionsTextBox.Text = Convert.ToString(myCustomer.TotalTransactions);
        }
        private void clearButton_Click(object sender, EventArgs e)
        {
            customerIDTextBox.Text = "";
            fullNameTextBox.Text = "";
            addressTextBox.Text = "";
            emailTextBox.Text = "";
            phoneNumberTextBox.Text = "";
            addDateTextBox.Text = "";
            totalTransactionsTextBox.Text = Convert.ToString(""); 
        }
    }
}

c#:从字符串到日期时间转换时的未处理异常

如果它不起作用,您可以尝试cast并做一些事情吗?

private bool ValidInteger(string value)
{
    int notUsed=0;
    return Int32.TryParse(value, out notUsed);
}

我删除了function关键字。代码现在可以编译了。

您可以检查是否可以在设置值转换之前直接转换,使用类型的TryParse()方法,您可以进行正确的转换,尝试如下

private void saveButton_Click(object sender, EventArgs e)
{
    // check if the Id is a integer
    int convertedId;
    if (!int.TryParse(customerIDTextBox.Text, out convertedId))
    {
        MessageBox.Show("The ID is not a integer value");
        return;
    }
    myCustomer.Id = convertedId;
    myCustomer.Name = fullNameTextBox.Text;
    myCustomer.Address = addressTextBox.Text;
    myCustomer.Email = emailTextBox.Text;
    myCustomer.Phone = phoneNumberTextBox.Text;
    // check if the DateTime is a valid dateTeime
    DateTime convertedDate;
    if (!DateTime.TryParseExact(addressTextBox.Text,"MM/dd/yyyy", null, System.Globalization.DateTimeStyles.AssumeLocal, out convertedDate))
    {
        MessageBox.Show("The filed is not a valid date");
        return;
    }
    myCustomer.AddDate = convertedDate;

    myCustomer.TotalTransactions = Convert.ToInt32(totalTransactionsTextBox.Text);
}

您可以通过添加一些代码来验证输入,以AddDate为例:

try{
   myCustomer.AddDate = Convert.ToDateTime(addressTextBox.Text);
}
catch
{
   MessageBox.Show("Add Date is not valid");
   return;
}

,如果可能的话,使用DatePicker控件输入日期。

我建议你在你的文本框上使用合适的命名。您的代码显示,当您保存日期时,您正在使用addressTextBox。文本:

myCustomer.AddDate = Convert.ToDateTime(addressTextBox.Text);

我认为应该是这样的:

myCustomer.AddDate = DateTime.Parse(dateTextBox.Text,"MM/dd/yyyy");

当用户选择日期时,最好使用DateTimePicker控件而不是TextBox。希望这对你有帮助!