从列表框项中获取单个字符串

本文关键字:获取 单个 字符串 列表 | 更新日期: 2023-09-27 17:54:25

我有一个列表框,里面有X个项目。Item就像String, double, double。我希望第二个双精度值为smalles的项与它的字符串一起显示在Label中。

示例项目名称Value1 Value2每个部分都被空间分割。这段代码只适用于获取第二个double类型的最小值,但不取该项的字符串。

vName函数不工作

    private void bVergleich_Click(object sender, RoutedEventArgs e)
    {
        if (listBox.Items.Count <= 0)
        {
            MessageBox.Show("Bitte erst Einträge hinzufügen.");
        }
        else
        {
            int anzahl = listBox.Items.Count;
            string str = listBox.Items[anzahl].ToString();
            string vName = str.Substring(0, str.IndexOf(" ") + 1);
            var numbers = listBox.Items.Cast<string>().Select(obj => decimal.Parse(obj.Split(' ').First(), NumberStyles.Currency, CultureInfo.CurrentCulture));
            decimal minValue = listBox.Items.Cast<string>().Select(obj => decimal.Parse(obj.Split(' ').Last(), NumberStyles.Currency, CultureInfo.CurrentCulture)).Min();
            lVergleich.Content = vName + " " + minValue + "€";
        }
    }

你知道我怎么才能得到字符串吗?

从列表框项中获取单个字符串

我将尝试使用您的代码示例。您可以使用老派的方法,在所有条目中运行for循环。

private void bVergleich_Click(object sender, RoutedEventArgs e)
{
    if (listBox.Items.Count <= 0)
    {
        MessageBox.Show("Bitte erst Einträge hinzufügen.");
    }
    else
    {
        List<decimal> tmpListe = new List<decimal>();
        int anzahl = listBox.Items.Count;
        for (int i = 0; i < anzahl; i++)
        {
            string str = listBox.Items[i].ToString();
            // collect all the second double values
            tmpListe.Add(decimal.Parse(str.Split(' ').Last(), NumberStyles.Currency, CultureInfo.CurrentCulture));
        }
        // get the minimal value and its index
        decimal minValue = tmpListe.Min();
        int index = tmpListe.IndexOf(tmpListe.Min());
        // use the index to get the name
        string str2 = listBox.Items[index].ToString();
        string vName = str2.Substring(0, str2.IndexOf(" ") + 1);
        // write down your comparison
        lVergleich.Content = vName + " " + minValue + "€";
    }
}

这将显示列表中第一个最低值。

我个人也建议使用一个自定义类与3个属性和一个覆盖的ToString方法显示。然后收集通用List中的所有项目,并将此列表绑定到ListBox

您可以按所需值对集合进行排序,并取序列中的第一个元素

List<string> list = listBox.Items.ToList();
list.Sort((x1, x2) => decimal.Compare(decimal.Parse(x1.Split(' ')[1]), decimal.Parse(x2.Split(' ')[1])));
string x = list.First();

还是

string result = listBox.Items.OrderBy(y =>  decimal.Parse(y.Split(' ')[1])).First();