【问题标题】:Display all values of Hashtable through button通过按钮显示Hashtable的所有值
【发布时间】:2014-09-12 16:27:32
【问题描述】:

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

    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?
        }
    }

【问题讨论】:

    标签: c# winforms hashtable


    【解决方案1】:

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

    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
    • label4.Text += " "+ DE.Key +DE.Value 有效,但它重复第二个值两次。我怎样才能阻止它?
    • @samjohal 您是否在foreach 循环之前添加了label4.Text = ""
    • 哦,现在它起作用了。但是 label4.Text = "" 怎么会停止重复呢?
    【解决方案2】:

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

            StringBuilder allEntries = new StringBuilder();
            foreach (DictionaryEntry DE in Info)
            {
                allEntries.Append(DE.Key);
                allEntries.Append(DE.Value);
            }
            label4.Text = allEntries.ToString();
    

    [我编辑了未编译的代码的早期版本。]

    KC

    【讨论】:

    • 这给出了一个错误,说无法将类型字符串转换为 System.Text.StringBuilder
    猜你喜欢
    • 2012-08-08
    • 1970-01-01
    • 2014-04-18
    • 2021-05-28
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 2023-02-13
    • 1970-01-01
    相关资源
    最近更新 更多