0

我希望能够单击 Compute Pay 按钮来浏览员工对象并显示每个对象的薪水。问题是它不会超过第一个。对不起,如果答案很明显。

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();
            }

        }



}
}
4

2 回答 2

1

将 index 作为类变量并在 buttonCalcPay_Click 的末尾增加它。如果要循环该索引,则在递增时检查它是否大于 3 - 如果是,则再次将其设置为 0。

于 2012-09-18T04:25:34.140 回答
0

始终当您单击“buttonCalcPay”按钮时,您将索引设置为零,这是您始终获得第一个员工的原因。在您声明SIZE变量的地方声明它,如下所示:

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

然后在您的按钮单击事件中编写以下代码:

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

而且我认为您应该使用 System.Text.StringBuilder 而不是字符串。利用

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

附加文本。然后在需要时将其转换为字符串:

     sBuilder.ToString();

希望能帮助到你。

于 2012-09-18T05:57:05.217 回答