正在从列表框项中检索值

本文关键字:检索 列表 | 更新日期: 2023-09-27 18:26:34

我在获取Listbox项的值时遇到问题。列表框中填充了我创建的自定义类元素。

private void btnSave1_Click(object sender, EventArgs e)
    {
        ListItem li = new ListItem(
            int.Parse(txtId1.Text),
            txtName1.Text,
            int.Parse(txtMinLevel1.Text),
            int.Parse(txtMinAttr11.Text),
            int.Parse(txtMinAttr21.Text),
            float.Parse(txtDamage1.Text),
            float.Parse(txtAdditionalDmg1.Text),
            cmbAdditionalDmgType1.SelectedItem.ToString(),
            float.Parse(txtRange1.Text),
            float.Parse(txtCost1.Text)
            );
        list1.Add(li);
        lstWeapons1.DataSource = null;
        lstWeapons1.DataSource = list1;
        lstWeapons1.DisplayMember = "name";
        lstWeapons1.ValueMember = "id";
    }
    private void lstWeapons1_SelectedIndexChange(object sender, EventArgs e)
    {
        var text = lstWeapons1.SelectedItem.ToString();
    }

事件发生后,text值为ListItem,而不是我期望的值

正在从列表框项中检索值

在您的情况下,Listbox的每个元素都是自定义类ListItem的实例。如果您没有在自定义类中定义ToString()方法的重写,那么在此自定义类上调用ToString(。所以你有这些选择

private void lstWeapons1_SelectedIndexChange(object sender, EventArgs e)
{
    if(lstWeapons1.SelectedValue != null) 
       var text = lstWeapons1.SelectedValue.ToString();
}

private void lstWeapons1_SelectedIndexChange(object sender, EventArgs e)
{
    if(lstWeapons1.SelectedItem != null) 
    {
       ListItem item = lstWeapons1.SelectedItem as ListItem;
       var text = item.id.ToString();
    }
}

public class ListItem
{
    public override string ToString()
    {
        return this.id.ToString();
    }
}
private void lstWeapons1_SelectedIndexChange(object sender, EventArgs e)
{
    if(lstWeapons1.SelectedItem != null) 
    {
       var text = lstWeapons1.SelectedItem.ToString();
    }
}

请注意,我总是检查SelectedItem或SelectedValue是否为null,因为您不能排除在没有选择项目的情况下调用SelectedIndexChanged的可能性。