列表框选定项问题.改为显示覆盖的 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);
}
当我运行程序并在列表中选择一个项目而不是显示SelectedItem
的MessaseBox
时,它会显示自定义类中重写的 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;
}
}
你应该这样做。我没有时间测试它,但 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);
}