如何使这个按钮的事件处理程序将多个值添加到数组中?

时间:2016-10-23 16:32:27

标签: c# arrays button event-handling

我的程序允许用户将小时和分钟的值输入到预定义长度的数组中。 我希望这个名为add的按钮用于创建一个表单,以允许用户输入多个输入,直到阵列完全居住。然后,当它完成时,调用sortArray()方法它们现在它只允许一个输入然后抛出异常。我该怎么做?

private void addButton_Click(object sender, EventArgs e)
    {

        int index = 0;

        try
        {

            while (index <= array.Length)
            {

                minutes = Int32.Parse(minutesTextBox.Text);

                hours = Int32.Parse(hoursTextBox.Text);


                MessageBox.Show("You have successfully entered a time!");

                array[index] = new RandomClass.Time(hours, minutes);

                index = index + 1;

            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.GetType().FullName);
            MessageBox.Show("Please only input integer numbers. Start again from the beginning");
            hoursTextBox.Text = null;
            minutesTextBox.Text = null;
            array = null;
            arrayLength = null;
        }

            MessageBox.Show("Please choose what order you want arrange the sort!");
            FileA.RandomClass.sortArray(array);

    }

3 个答案:

答案 0 :(得分:1)

你没有显示数组的大小,但是这一行:

    while (index <= array.Length)
到达数组末尾时,

会导致问题,因为数组的索引从零到小于数组的长度。

因此您需要将此行更改为:

    while (index < array.Length)

像这样循环可能更安全:

    foreach (ver element in array)
    {
        // do stuff
        element = new RandomClass.Time(hours, minutes);
    }

这样就无法循环到数组的末尾。

答案 1 :(得分:1)

不要使用此行。您将获得IndexOutOfRangeException异常,其中index将等于数组长度。

while (index <= array.Length)

你应该这样使用。

while (index < array.Length)

还有一个,您可以使用int.TryParse来删除异常ID文本为null或emptry。

答案 2 :(得分:1)

我的答案基于这样的假设:必须为每小时和分钟的新值点击添加按钮。

目前,我在您的代码中看到了以下问题

  

int index = 0;

每次单击添加按钮时,您都将索引设置为零,因为每次单击添加按钮时都会覆盖此数组值。在代码中更合适的位置初始化索引。

  

while(index&lt; = array.Length)

假设数组长度为5,索引值为5,那么这一行将导致错误,因为数组在c#中被归零为

  

minutes = Int32.Parse(minutesTextBox.Text);

Int32.Parse方法返回一个bool,表示转换是否成功。使用int32.Parse的更合适的方法是

Int32.Parse(minutesTextBox.Text, out minutes);

现在,由于每个添加按钮添加了新值,因此您可以将while更改为if和else。即,

if(index < array.Length) 
//Parse, add to array and increment the index
else
//Reset index (if required) and Call the sortArray() method.