-1

配列に保存されている請求書の小計をメッセージボックスに表示しようとしています...そのうちの5つは、foreachメソッドを使用してメッセージボックスに表示されます。賃金を入力すると、計算が行われ、小計の値が配列に格納されます。decArrayとintIndexという配列とインデックスを宣言しました。誰かが私が行方不明または間違っていることを教えてもらえますか?前もって感謝します!

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

    public partial class frmInvoiceTotal : Form
    {
        public frmInvoiceTotal()
        {
            InitializeComponent();
        }

        // TODO: declare class variables for array and list here
        decimal[] decArray = new decimal[5];
        int intIndex = 0;

        private void btnCalculate_Click(object sender, EventArgs e)
        {
            try
            {
                if (txtSubtotal.Text == "")
                {
                    MessageBox.Show(
                        "Subtotal is a required field.", "Entry Error");
                }
                else
                {
                    decimal subtotal = Decimal.Parse(txtSubtotal.Text);
                    if (subtotal > 0 && subtotal < 10000)
                    {
                        decimal discountPercent = 0m;
                        if (subtotal >= 500)
                            discountPercent = .2m;
                        else if (subtotal >= 250 & subtotal < 500)
                            discountPercent = .15m;
                        else if (subtotal >= 100 & subtotal < 250)
                            discountPercent = .1m;
                        decimal discountAmount = subtotal * discountPercent;
                        decimal invoiceTotal = subtotal - discountAmount;

                        discountAmount = Math.Round(discountAmount, 2);
                        invoiceTotal = Math.Round(invoiceTotal, 2);

                        txtDiscountPercent.Text = discountPercent.ToString("p1");
                        txtDiscountAmount.Text = discountAmount.ToString();
                        txtTotal.Text = invoiceTotal.ToString();

                        for (intIndex = 0; intIndex <= decArray.Length - 1; intIndex++)
                        {
                             DecArray[intIndex] = InvoiceTotal
                        }

                    }
                    else
                    {
                        MessageBox.Show(
                            "Subtotal must be greater than 0 and less than 10,000.", 
                            "Entry Error");
                    }
                }
            }
            catch (FormatException)
            {
                MessageBox.Show(
                    "Please enter a valid number for the Subtotal field.", 
                    "Entry Error");
            }
            txtSubtotal.Focus();
        }

        private void btnExit_Click(object sender, EventArgs e)
        {
            // TODO: add code that displays dialog boxes here
            string totalstring = "";
            foreach (decimal value in decArray)
            {
                totalstring += value + "\n";
                MessageBox.Show(totalstring + "\n", "Order Totals");
            }
            this.Close();
        }
    }
}
4

2 に答える 2

4

あなたはあなたのdecArray(例えばdecArray[0] = n;)に割り当てることは決してありません

于 2013-02-07T17:58:40.093 に答える
1

count変数を追加して配列の数を増やす場合は、複数の量を追加できます。また、必要に応じて配列のサイズを変更できるようにすることもできます。

decimal[] decArray = new decimal[5];
int _indexCount = 0;

private void btnCalculate_Click(object sender, EventArgs e)
{
    ...
    if (decArray.Count() == _indexCount)
    {
        var elementHolder = decArray;
        decArray = new T[(decArray.Length + 1) * 2];

        for (int i = 0; i < elementHolder.Length; i++)
        {
            decArray[i] = elementHolder[i];
        }
    }

    decArray[_indexCount] = invoiceTotal;
    _indexCount++;

}

そのようなものが機能するはずです。

編集:非常に多くのメッセージを受け取る理由はMessageBox.Show()、foreachループの内側にあるため、ループの外側に配置するだけで、1つしか表示されないためです。

    private void btnExit_Click(object sender, EventArgs e)
    {
        // TODO: add code that displays dialog boxes here
        string totalstring = "";
        foreach (decimal value in decArray)
        {
            totalstring += value + "\n";
        }
        MessageBox.Show(totalstring + "\n", "Order Totals");
        this.Close();
    }
于 2013-02-07T18:59:58.893 に答える