【问题标题】:Add multiple items into array and display array in textbox将多个项目添加到数组中并在文本框中显示数组
【发布时间】:2017-03-27 14:52:40
【问题描述】:

我目前有一个表单,它接受来自 2 个文本框和 1 个 numericUpDown 的 3 个用户输入。

我希望能够在单击按钮时获取此处输入的值,并将所有 3 的值显示到单独的文本框中。

当有多个添加时会出现问题。 我尝试创建一个数组,但它仍然只显示最后一个输入。

        private void AddButton_Click(object sender, EventArgs e)
    {
        string newItem = NameTextBox.Text + "\t" +  QuantityBox.Value.ToString() + "\t" + PriceBox.Text;
        List<String> newItemList = new List<string>();
        newItemList.Add(newItem);
        for(int i = 0; i < newItemList.Count; i++)
        {
            BasketBox.Text = newItemList[i] + "\n";
        }
    }

【问题讨论】:

  • newItemList 的实例移到AddButton_Click 方法之外。每次单击按钮时,您都会创建一个新列表并丢失现有列表的内容。
  • 您每次都在覆盖.Text。改为连接:将 BasketBox.Text = newItemList[i] + "\n" 更改为 BasketBox.Text += newItemList[i] + "\n";
  • newItemList 声明移到方法之外。或者附加到您的文本框的Text 而不是替换它。阅读有关Variable and Method Scope in Microsoft .NET 的更多信息。或者看看TextBox.AppendText
  • 您是否将Multiline 属性关闭Text Box 设置为true?我在我的编辑中写了它。
  • @MongZhu 是的,多行属性设置为true,我已经尝试过你所做的,但是它仍然只会覆盖已经写入的内容而不是进入新行

标签: c# arrays winforms textbox


【解决方案1】:

在函数之外创建你的列表,这样你就可以维护输入列表, 并在每次点击时显示更新的列表。

List<String> newItemList = new List<string>();
private void AddButton_Click(object sender, EventArgs e)
{
    string newItem = NameTextBox.Text + "\t" +  QuantityBox.Value.ToString()    + "\t" + PriceBox.Text;

    newItemList.Add(newItem);
    for(int i = 0; i < newItemList.Count; i++)
    {
        BasketBox.Text = newItemList[i] + "\n";
    }
}

【讨论】:

  • Yepyepyep,唯一让我费时费力才弄清楚的问题是 "\n" != "\r\n"。
【解决方案2】:

你可以这样做:

private void AddButton_Click(object sender, EventArgs e)
    {
        string newItem = NameTextBox.Text + "\t" +  QuantityBox.Value.ToString() + "\t" + PriceBox.Text;
        List<String> newItemList = new List<string>();
        newItemList.Add(newItem);
        for(int i = 0; i < newItemList.Count; i++)
        {
            BasketBox.Text += newItemList[i] + "\n"; // this will add the text to your box
        }
    }

这将“擦除” BasketBox 中的旧文本:

BasketBox.Text = newItemList[i] + "\n"

这将在 BasketBox 中添加文本:

BasketBox.Text += newItemList[i] + "\n"

【讨论】:

  • 这非常接近!谢谢!问题是由于某种原因它不会进入新线路
【解决方案3】:

有一个很酷的方法String.Join 可以一次性连接列表中的字符串项:

BasketBox.Text = String.Join(Environment.NewLine, newItemList);

如果您在列表之外声明列表,则每次单击按钮时都会添加一个项目并显示所有项目:

List<String> newItemList = new List<string>();

private void AddButton_Click(object sender, EventArgs e)
{
    string newItem = NameTextBox.Text + "\t" +  QuantityBox.Value.ToString() + "\t" + PriceBox.Text;
    newItemList.Add(newItem);
    BasketBox.Text = String.Join(Environment.NewLine, newItemList);
}

编辑:

这当然只有在您将属性 Multiline 设置为 true 时才有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    相关资源
    最近更新 更多