我在获取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而不是我期望的值
答案 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的可能性