Listbox.selected назначение переменной изменения индекса

Привет. Каков правильный способ присвоения значения выбранного индекса из списка в переменную? Пользователь выбирает элемент в списке, а затем выходные данные меняются в зависимости от их выбора.

Я использую:

variablename = listbox.text

в событии listBox_SelectedIndexChanged и это работает.

Когда я использую событие button_click, я использую:

variablename = listbox.selectedindex 

Но это не работает в событии listbox_selectedindexchanged.

Пожалуйста, не могли бы вы сообщить мне, можно ли использовать его, как я сделал выше, или если у меня возникнут проблемы и почему вы не можете использовать метод selectedindex.

Спасибо!


person Wannabe    schedule 03.04.2011    source источник


Ответы (2)


О. Похоже, что ваша переменная является строкой, но вы пытаетесь присвоить ей значение, возвращаемое свойством 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
person XIVSolutions    schedule 03.04.2011

Ну, это зависит от того, чего вы хотите добиться от выбранного элемента списка.

Есть несколько возможных способов, позвольте мне попытаться объяснить некоторые из них для вашего домашнего задания.

Предположим, у вас есть таблица данных с двумя столбцами и их строками...

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, тогда...

Тоже ищу, если найду, отпишусь.

Я надеюсь, что ваше понимание укрепляется.

Удачи!

person Waqas Raja    schedule 03.04.2011