-3

取得ボタンがクリックされたときにCustomerクラスから顧客データをロードする単純なGUIアプリケーションを作成しようとしています。このデータは、保存ボタンがクリックされたときにCustomerオブジェクトに保存されます。

テストの結果、クリアボタンと取得ボタンが期待どおりに機能することがわかりましたが、保存ボタンを押すと次のエラーメッセージが表示されます。

予期せぬ事態がアプリで発生しました。[続行]をクリックすると、アプリケーションはこのエラーを無視して続行を試みます。[終了]をクリックすると、アプリケーションはすぐに閉じます。

文字列が有効な日時として認識されませんでした。インデックス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(""); 

        }
    }
}
4

4 に答える 4

1

キャストを試してみて、うまくいかない場合は何かできますか?

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

function キーワードを削除しました。コードがコンパイルされるようになりました。

于 2013-03-14T03:38:12.680 に答える
0

いくつかのコードを追加して入力を検証できます。例として AddDate を取り上げます。

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

可能であれば、DatePicker コントロールを使用して日付を入力します。

于 2013-03-14T03:36:01.753 に答える
0

タイプのメソッドを使用して、直接変換する値を設定する前に、変換が可能かどうかを確認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);
}
于 2013-03-14T03:37:21.783 に答える