2016-03-01 2 views
0

У меня возникла проблема с попыткой получить SelectedItem в ListBox. Listbox - это источник данных, связанный со списком в моем примере.Проблема с ListBox SelectedItem. Отображение переопределенного ToString вместо

listBox1.DisplayMember = "StringPosition"; 
listBox1.ValueMember = "StringPosition"; 
listBox1.DataSource = MatchList; 

private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    string curItem = listBox1.SelectedItem.ToString(); 
    MessageBox.Show(curItem); 
} 

Когда я запустить программу и выбрать пункт в списке, а не MessaseBox показывая SelectedItem он показывает преодолено ToString метод в моем пользовательском классе. Теперь пользовательский метод ToString был оставлен в стороне от примера MSDN, и мне это действительно не нужно. Однако даже если я прокомментирую это, а не переопределенный ToString, он просто отобразит Parser.SectorBodies, который является моим пространством имен проектов и пользовательским классом. Так как же я решить эту проблему, так что я могу получить выбранный элемент в моей ListBox

static List<SectorBodies> MatchList = new List<SectorBodies>(); 

public class SectorBodies 
{ 
    public int MatchCount { get; set; } 
    public string StringPosition { get; set; } 
    public string SolarSystemFileComment { get; set; } 
    public string SolarSystemX { get; set; } 
    public string SolarSystemY { get; set; } 
    public string SolarSystemZ { get; set; } 

    public override string ToString() 
    { 
    return 
    " Position: " + StringPosition + 
    " Count: " + MatchCount; 
    } 
} 
+0

Что вы хотите, чтобы показать? Выбранный элемент будет объектом, поскольку вы используете их в качестве источника данных. – Plutonix

+0

@Plutonix. Я пытался получить текст выбранного элемента, чтобы оценить его. –

+0

Непонятный вопрос. Вы имели в виду это: 'SectorBodies curItem = listBox1.SelectedItem as SectorBodies; MessageBox.Show (curItem.ToString()); '? – Sakura

ответ

1

Вы скорее должны это сделать. У меня не было времени проверить его, но SelectedValue должен быть только строкой, поэтому не нужно делать ToString().

private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    string curItem = listBox1.SelectedValue.ToString(); 
    MessageBox.Show(curItem); 
} 

Чтобы показать все, что я попробую, как указано в одном из комментариев. Вы можете захватить весь объект, бросить его в свой класс. Затем у вас есть доступ ко всему, что находится в объекте. Надеюсь, это сработает!

private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     SectorBodies curItem = listBox1.SelectedItem as SectorBodies; 
     MessageBox.Show(curItem.StringPosition); 
    } 
+0

SelectedItem не имеет аргумента .Value Однако я подозреваю, что вы имели в виду строку curItem = listBox1.SelectedValue.ToString(); который работает. Я не знаю, почему я этого никогда не видел :) –

+0

Только что обновил свой ответ. Вы ищете значение text/displaymember? –

+0

идеально оба. Я буду использовать для обоих в некоторой точке –

Смежные вопросы