简体   繁体   中英

need help displaying objects on windows form application

I want to be able to click on the Compute Pay button to move through the employee objects and display a paycheck for each one. the problem is that it wont move past the first one. Sorry if the answer is obvious.

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private const int SIZE = 4; // the size of the array
        // create array to hold employee references
        Employee[] employees = new Employee[SIZE];

        public Form1()
        {
            InitializeComponent();

            // Create some employee objects
            employees[0] = 
                new Hourly(1, "H. Potter", 
                           "Privet Drive", "201-9090", 40, 12.00);
            employees[1] = 
                new Salaried(2, "A. Dumbledore", 
                             "Hogewarts", "803-1230", 1200);
            employees[2] = 
                new Hourly(3, "R. Weasley", 
                           "The Burrow", "892-2000", 40, 10.00);
            employees[3] = 
                new Salaried(4, "R. Hagrid", 
                             "Hogwarts", "910-8765", 1000);


        }

        private void buttonCalcPay_Click(object sender, EventArgs e)
        {
            int index = 0;
            string ostring = ("Fluffshuffle Electronics check no.");
            ostring += string.Format("{0}", index);
            ostring += Environment.NewLine;
            ostring += Environment.NewLine;
            ostring += "       pay to the order of";
            ostring += employees[index].Name;
            ostring += Environment.NewLine;
            ostring += string.Format("{0:C}", employees[index].CalcPay());
            ostring += Environment.NewLine;
            ostring += Environment.NewLine;
            ostring += "             First National Bank";
            textBoxCheck.Text = ostring;

            textBoxName.Text = employees[index].Name;
            textBoxAddress.Text = employees[index].Address;
            textBoxPhone.Text = employees[index].PhoneNum;
            textBoxEmpNum.Text = string.Format("{0}", employees[index].EmpNum);
            index++;

            //see if object is hourly
            Hourly someEmp1 = employees[index] as Hourly;
            if (someEmp1 != null)
            {
                textBoxHours.Text = 
                    string.Format("{0:F2}", someEmp1.HoursWorked);
                textBoxWage.Text = 
                    string.Format("{0:F2}", someEmp1.HourlyWage);
                textBoxSalary.Clear();

            }
            //not hourly, must be salary
            Salaried someEmp2 = employees[index] as Salaried;
            if (someEmp2 != null)
            {
                textBoxHours.Clear();
                textBoxWage.Clear();
                textBoxSalary.Text = string.Format("{0:F2}", someEmp2.Salary);

            }

            else
            {
                buttonCalcPay.Enabled = false;
                textBoxName.Clear();
                textBoxAddress.Clear();
                textBoxEmpNum.Clear();
                textBoxPhone.Clear();
                textBoxHours.Clear();
                textBoxWage.Clear();
                textBoxSalary.Clear();
            }

        }



}
}

Make index as class variable and increment it at the end of buttonCalcPay_Click. If you want to loop that index, while incrementing check if it greater than 3 - if yes set it to 0 again.

Always when you click "buttonCalcPay" button you set index to zero it the reason that you always get first employee. Declare it where you have declared varible as following: 变量的位置声明它,如下所示:

private const int SIZE = 4; // the size of the array
private int index = 0;

Then in your button click event write the following code:

    private void buttonCalcPay_Click(object sender, EventArgs e)
    {
        if(index < SIZE)
        {
             //Your code goes here
        }
        index++;
    }

And I think you should use System.Text.StringBuilder instead of string. Use

    System.Text.StringBuilder sBuilder = new StringBuilder();
    sBuilder.Append("Your text goes here");
    sBuilder.Append("\nAnother text");

to append text. Then convert it to string when you need using:

     sBuilder.ToString();

Hope it helps.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM