从列表框项中检索值

时间:2015-12-13 19:37:44

标签: c#

我在获取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而不是我期望的值

1 个答案:

答案 0 :(得分:1)

在您的情况下,列表框的每个元素都是您的自定义类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的可能性