簡體   English   中英

如何從textBox向數組添加值? WinForms C#

[英]How to add value to array from textBox? WinForms C#

我想將值添加到數組。 這些值來自textBoxes。 當我單擊“計算”按鈕時,它應該顯示每個數字,但是不會發生。

誰能解釋我發生了什么事?

碼:

//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:

在此處輸入圖片說明

在運行時:

在此處輸入圖片說明

如您所見,它沒有正確顯示數組

我不知道我是否真的了解你想要什么...

變量:

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

假設您從文本框tbValues輸入5個值

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

然后在Buttun 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();
}

我看到您可能需要在代碼中更改的幾件事。

將項目添加到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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM