列表框选定项问题.改为显示覆盖的 ToString

本文关键字:显示 覆盖 ToString 问题 列表 | 更新日期: 2023-09-27 18:36:44

>我在尝试获取ListBox中的SelectedItem时遇到了问题。Listbox是绑定到我示例下方列表的数据源。

listBox1.DisplayMember = "StringPosition";
listBox1.ValueMember = "StringPosition";
listBox1.DataSource = MatchList;
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    string curItem = listBox1.SelectedItem.ToString();
    MessageBox.Show(curItem);
}

当我运行程序并在列表中选择一个项目而不是显示SelectedItemMessaseBox时,它会显示自定义类中重写的 ToString 方法。现在自定义ToString方法只是 MSDN 示例的遗留物,我实际上并不需要它。但是,即使我将其注释掉而不是覆盖的ToString它也只会显示Parser.SectorBodies这是我的项目命名空间和自定义类。那么我该如何解决这个问题,以便我可以在我的ListBox中获取所选项目

static List<SectorBodies> MatchList = new List<SectorBodies>();
public class SectorBodies
{
    public int MatchCount { get; set; }
    public string StringPosition { get; set; }
    public string SolarSystemFileComment { get; set; }
    public string SolarSystemX { get; set; }
    public string SolarSystemY { get; set; }
    public string SolarSystemZ { get; set; }
    public override string ToString()
    {
     return
     "   Position: " + StringPosition +
     "   Count: " + MatchCount;
    }
}

列表框选定项问题.改为显示覆盖的 ToString

你应该这样做。我没有时间测试它,但 SelectedValue 应该只是字符串,所以不需要做 ToString()。

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    string curItem = listBox1.SelectedValue.ToString();
    MessageBox.Show(curItem);
}

为了显示所有内容,我也会尝试这样做,正如其中一条评论中指出的那样。您可以抓取整个对象,将其强制转换为您的类。然后,您可以访问对象中的所有内容。希望这有效!

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        SectorBodies curItem = listBox1.SelectedItem as SectorBodies;
        MessageBox.Show(curItem.StringPosition);
    }