C# 通过按钮显示哈希表的所有值

C# 通过按钮显示哈希表的所有值,c#,winforms,hashtable,C#,Winforms,Hashtable,好的,我正试图通过我的按钮在哈希表中显示多个值。但它一直在向我展示第一个价值,而不是其他价值 public Form1() { InitializeComponent(); } Hashtable Info = new Hashtable(); private void button1_Click(object sender, EventArgs e) { string a = textBox1.Text;

好的,我正试图通过我的按钮在哈希表中显示多个值。但它一直在向我展示第一个价值,而不是其他价值

    public Form1()
    {
        InitializeComponent();
    }
    Hashtable Info = new Hashtable();

    private void button1_Click(object sender, EventArgs e)
    {
        string a = textBox1.Text;
        string b = textBox2.Text;
        Info.Add(a,b);
       label4.Text = a + " " + b;
    }

    private void button3_Click(object sender, EventArgs e)
    {
        foreach (DictionaryEntry DE in Info)
        {
            label4.Text = ""+ DE.Key +DE.Value; //this only shows the first added value. How do I show the remaining values?
        }
    }

这是因为循环的每次迭代都会替换文本中以前的值。您可以通过在进入循环之前清除文本,并使用
+=
而不是
=
来解决此问题:

label4.Text += " "+ DE.Key +DE.Value
一种更好的方法是使用
string.Join
进行以下操作:

private void button3_Click(object sender, EventArgs e) {
    label4.Text = string.Join(
        ", "
    ,   Info.Select(p => string.Format("{0}-{1}", p.Key, p.Value))
    );
}

这是因为循环的每次迭代都会替换文本中以前的值。您可以通过在进入循环之前清除文本,并使用
+=
而不是
=
来解决此问题:

label4.Text += " "+ DE.Key +DE.Value
一种更好的方法是使用
string.Join
进行以下操作:

private void button3_Click(object sender, EventArgs e) {
    label4.Text = string.Join(
        ", "
    ,   Info.Select(p => string.Format("{0}-{1}", p.Key, p.Value))
    );
}

我建议您不要在循环中不断更改label4.Text,而是在循环中构建一个字符串,并在最后更改一次。比如:

        StringBuilder allEntries = new StringBuilder();
        foreach (DictionaryEntry DE in Info)
        {
            allEntries.Append(DE.Key);
            allEntries.Append(DE.Value);
        }
        label4.Text = allEntries.ToString();
[我编辑了未编译的早期版本的代码。]


KC

我建议您不要在循环中不断更改label4.Text,而是在循环中构建一个字符串,并在最后更改一次。比如:

        StringBuilder allEntries = new StringBuilder();
        foreach (DictionaryEntry DE in Info)
        {
            allEntries.Append(DE.Key);
            allEntries.Append(DE.Value);
        }
        label4.Text = allEntries.ToString();
[我编辑了未编译的早期版本的代码。]


KC

您还需要将循环外的文本留空。或者在循环外分配一个局部变量,并使用
+=
运算符重载,然后将其分配给label4.Textlabel4.text+=“”+DE.Key+DE.Value,但第二个值重复两次。我怎样才能阻止它?@samjohal你在
foreach
循环之前添加了
label4.Text=”“
?哦,现在它工作了。但是为什么label4.Text=”“会停止重复它呢?您还需要在循环外部清空文本。或者在循环外部分配一个局部变量,并使用
+=
操作符重载,然后将其分配给label4.Textlabel4.Text+=“”+DE.Key+DE.Value,但第二个值重复两次。我怎样才能阻止它?@samjohal你在
foreach
循环之前添加了
label4.Text=”“
?哦,现在它工作了。但是为什么label4.Text=”“停止重复它?这会给出一个错误,说明无法将类型字符串转换为System.Text.StringBuilder。这会给出一个错误,说明无法将类型字符串转换为System.Text.StringBuilder