Listbox.selected索引更改变量赋值

时间:2011-04-03 14:01:34

标签: vb.net selectedindexchanged

你好 将所选索引的值从列表框分配给变量的正确方法是什么?用户选择列表框中的项目,然后输出会根据其选择而更改。

我用:

variablename = listbox.text

listBox_SelectedIndexChanged事件中,这有效。

当我使用button_click事件时,我使用:

variablename = listbox.selectedindex 

但这在listbox_selectedindexchanged事件中不起作用。

如果可以像我上面那样使用它,或者如果我遇到问题以及为什么你不能使用selectedindex方法,请你告诉我。

谢谢!

2 个答案:

答案 0 :(得分:4)

一个。听起来你的变量是一个字符串,但是你试图将SelectedIndex属性返回的值赋给它,这是一个整数。

B中。如果您尝试检索与列表框的SelectedINdex关联的项的值,请使用索引返回对象本身(列表框是对象列表,通常但不总是将其作为字符串)。

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
    'THIS retrieves the Object referenced by the SelectedIndex Property (Note that you can populate
    'the list with types other than String, so it is not a guarantee that you will get a string
    'return when using someone else's code!):
    SelectedName = ListBox1.Items(ListBox1.SelectedIndex).ToString
    MsgBox(SelectedName)
End Sub

使用SelectedItem属性更直接:

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged

    'This returns the SelectedItem more directly, by using the SelectedItem Property
    'in the event handler for SelectedIndexChanged:
    SelectedName = ListBox1.SelectedItem.ToString
    MsgBox(SelectedName)

End Sub

答案 1 :(得分:2)

这取决于您希望从列表框的所选项目中获得什么。

有几种可能的方法,让我试着为你的作业解释一些。

假设您有一个包含两列的数据表及其行......

ID    Title
_________________________
1     First item's title
2     Second item's title
3     Third item's title

然后将此数据表绑定到列表框中,

ListBox1.DisplayMember = "ID";
ListBox1.ValueMember = "Title";

如果用户从列表框中选择第二项。

现在,如果您想获取所选项目的显示值(标题),则可以执行

string displayValue = ListBox1.Text;   // displayValue = Second item's title

或者甚至可以得到相同的结果。

// displayValue = Second item's title
string displayValue = ListBox1.SelectedItem.ToString();

要获取所选项目的值成员,您需要执行

string selectedValue = ListBox1.SelectedValue;    // selectedValue = 2

现在有些情况下您希望允许用户从列表框中选择多个项目,因此您可以设置

ListBox1.SelectionMode = SelectionMode.MultiSimple;

OR

ListBox1.SelectionMode = SelectionMode.MultiExtended;

现在假设用户选择了两个项目;第二和第三。

因此,只需遍历SelectedItems

即可获得显示值
string displayValues = string.Empty;
foreach (object selection in ListBox1.SelectedItems)
{
    displayValues += selection.ToString() + ",";
}

// so displayValues = Second item's title, Third item's title,

如果你想获得ID's而不是Title's那么......

我也正在浏览它,如果找到我会发布。

我希望你的理解能够建立。

祝你好运!