Как добавить значение в массив из textBox?WinForms C # - PullRequest
0 голосов
/ 14 ноября 2018

Я хочу добавить значения в массив.Эти значения приходят из текстовых полей.Когда я нажимаю кнопку «Calcular», она должна показывать каждое число, но этого не происходит.

Может кто-нибудь объяснить мне, что происходит?

Код:

//Declaração das Variáveis/Arrays
float[] Valores = new float[5];
int Limite = 0;
float Valor0, Valor1, Valor2, Valor3, Valor4;

//Introduzir Valores
private void TextBoxIntroduzirValores_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        if (Limite >= 5)
        {
            MessageBox.Show("Só pode introduzir 5 números!");
            TextBoxIntroduzirValores.Text = "";
        }
        else
        {
            for (int i = 0; i < 4; i++)
            {
                float ValorTemp = Convert.ToSingle(
                    TextBoxIntroduzirValores.Text);
                Valores[i] = ValorTemp;
            }

            ListaValores.Items.Add(TextBoxIntroduzirValores.Text);
            TextBoxIntroduzirValores.Text = "";
            Limite = Limite + 1;
        }
    }
}

//Introduzir Valores
private void TextBoxIntroduzirValores_TextChanged(object sender, EventArgs e)
{
    if (System.Text.RegularExpressions.Regex.IsMatch(
        TextBoxIntroduzirValores.Text, "[^0-9]"))
    {
        MessageBox.Show("Introduza apenas números por favor!");
        TextBoxIntroduzirValores.Text = TextBoxIntroduzirValores.Text.Remove(
            TextBoxIntroduzirValores.Text.Length - 1);
    }
}

//Botão Calcular
private void Calcular_Click(object sender, EventArgs e)
{
    Valor0 = Valores[0];
    Valor1 = Valores[1];
    Valor2 = Valores[2];
    Valor3 = Valores[3];
    Valor4 = Valores[4];
    string Valor00 = Convert.ToString(Valor0);
    string Valor11 = Convert.ToString(Valor1);
    string Valor22 = Convert.ToString(Valor2);
    string Valor33 = Convert.ToString(Valor3);
    string Valor44 = Convert.ToString(Valor4);
    TextBoxMaximo.Text = Valor00 + Valor11 + Valor22 + Valor33 + Valor44;
}

WinForm в режиме конструктора:

enter image description here

И во время выполнения:

enter image description here

Как видите, массив некорректно отображается

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Я вижу пару вещей, которые вы можете изменить в своем коде.

Когда вы добавляете элемент в ListBox:

  1. В качестве условия следует использовать свойство Length массива, который вы заполняете. Это уменьшает количество мест, в которых вы должны обновить свой код, если позже вы решите изменить максимальное количество значений.

  2. В настоящее время вы используете цикл для добавления того же номера в массив к первым четырем индексам. Вместо этого вы можете просто использовать Limite в качестве индекса для добавления элемента.

Таким образом, метод будет выглядеть так:

private void TextBoxIntroduzirValores_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        if (Limite >= Valores.Length)
        {
            MessageBox.Show($"You can only enter {Valores.Length} numbers!");
            TextBoxIntroduzirValores.Text = "";
        }
        else
        {
            // Add item to array
            Valores[Limite] = Convert.ToSingle(TextBoxIntroduzirValores.Text);

            // Increment index
            Limite = Limite + 1;

            // Add item to listbox
            ListaValores.Items.Add(TextBoxIntroduzirValores.Text);

            // Clear textbox
            TextBoxIntroduzirValores.Text = "";
        }
    }
}

Кроме того, когда вы вычисляете результаты, вы можете использовать методы расширения System.Linq для массива, в котором хранятся значения:

private void Calcular_Click(object sender, EventArgs e)
{
    // You can calculate values using Sytem.Linq extension methods
    txtMin.Text = Valores.Min().ToString();
    txtMax.Text = Valores.Max().ToString();
    txtAvg.Text = Valores.Average().ToString();
    txtTotal.Text = Valores.Sum().ToString();
}

Или, вы можете рассчитать эти значения долгий путь. Для этого создайте переменные с некоторыми значениями по умолчанию. Для значения по умолчанию Min мы используем максимально возможное число. Затем, когда мы перебираем каждый элемент в массиве, мы видим, что элемент меньше Min, и если это так, обновим Min этим новым значением. Точно так же мы используем наименьшее возможное число в качестве значения по умолчанию для Max. Это гарантирует, что эти элементы являются точными в конце цикла.

Для Total мы начинаем значение с 0, а затем каждый элемент в массиве Total, когда мы его циклически перебираем. А для Average мы просто делим Total на количество элементов в массиве (которое является свойством Length):

private void Calcular_Click(object sender, EventArgs e)
{
    // Or you can do it the long way. First start with default values:
    float min = Single.MaxValue;
    float max = Single.MinValue;
    float total = 0;

    // Then go through each item in the array 
    // and update the values above if necessary
    foreach (float item in Valores)
    {
        if (item < min) min = item;
        if (item > max) max = item;
        total = total + item;
    }

    // Calculate average last since we need the total first
    float avg = total / Valores.Length;

    // Update the textboxes with these values:
    txtMin.Text = min.ToString();
    txtMax.Text = max.ToString();
    txtAvg.Text = avg.ToString();
    txtTotal.Text = total.ToString();
}
0 голосов
/ 14 ноября 2018

Я не знаю, действительно ли я понимаю, что вы хотите, в любом случае ...

Переменные:

float[] values = new float[5];
int num = 0;

при условии, что вы вводите свои 5 значений из текстового поля tbValues

private void tbValues_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyChar == (char)Keys.Enter && num < 5 && !(string.IsNullorEmpty(tbValues.text)))
    {
         values[num] = int.Parse(tbValues.Text);
         listValues.Items.Add(values[num].ToString());
         num ++;
    }
    else
         ...
    tbValues.Clear();
}

Затем в Бутун Calc btnCalc

private void btnCalc_Click(object sender, EventArgs e)
{
    tbMax.Text = values.Max().ToString();
    tbMin.Text = values.Min().ToString();
    float sum = values.Sum();
    tbSum.Text = sum.Tosting();
    float average = sum / values.Length;
    tbAverage.Text = average.ToString();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...