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