2015-10-23 3 views
0

Я новичок в C#, хотя в прошлом году я занимал четверть Java. Завтра у меня назначено задание, так что вот мой вопрос. Я сделал небольшую программу, чтобы я мог надеяться получить то, что я ищу. Мне интересно, как, черт возьми, я смотрю на listBox и скажу, например, если выбран пункт футбол, сделайте одно, но если что-то еще выбрано, выполните другую вещь? Я загружу фрагмент кода, который не делает того, что он должен делать, и все вы можете назвать меня глупым, а затем дать мне ответ.Как получить каждый элемент в ListBox C#

private void submitButton_Click(object sender, EventArgs e) 
    { 
     string best; 
     best = namesListBox.SelectedItem.ToString(); 

     if ((string)namesListBox.SelectedItem == "Soccer") 
     { 
      MessageBox.Show("Fried chicken, don't let that bird die in vain."); 
     } 
     else 
     { 
      MessageBox.Show("Long long ago, in the land of the Hobbit..."); 
     } 
    } 

    private void exitButton_Click(object sender, EventArgs e) 
    { 
     Close(); 
    } 
} 

}

Каждый раз, когда этот код работает, я всегда получаю, очень давно .... Это не то, что я хочу видеть. Любая помощь будет оценена, я собираюсь отказаться от этой программы. Это не настоящая программа, это сложнее, я просто сделал это, чтобы продемонстрировать свой вопрос ... Спасибо заранее

+1

Почему вы не пытаетесь передать MessageBox свойство SelectedItem? Что вы видите тогда? – Steve

+0

Хорошим первым шагом было бы вызвать MessageBox.Show (namesListBox.SelectedItem); 'или, еще лучше, просто поставить точку останова в свой код и посмотреть, что это за значение. Это будет очень освещать. –

+0

В C# нет списков. В Windows Forms и WPF есть списки (похожие, но разные!). Пожалуйста, отметьте соответствующий UI Framework, а также C#. – crashmstr

ответ

0

Юрий,

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

Для чего вы используете строку «лучше всего»? вы определили его, но он не используется в вашем примере.

Это вы что искали? Попробуйте использовать метод ToString(), и обрежьте ее так, что пробелы не будет бросать код от:

string selectedItem = namesListBox.SelectedItem.ToString().Trim(); 

if (selectedItem == "Soccer") 
    MessageBox.Show("Soccer is selected."); 
else 
    MessageBox.Show("NOT SELECTED"); 

Может быть, это ошибка корпус? Если вы не хотите, чтобы беспокоиться о верхнем или нижнем регистре, попробуйте добавить .ToLower() в строку:

string selectedItem = namesListBox.SelectedItem.ToString().Trim().ToLower(); 

if (selectedItem == "Soccer".ToLower()) 
    // Handle code accordingly. 
else 
    // Handle accordingly. 

Вы также можете найти свой ListBox для строки и выяснить, где он находится. Затем определить, является ли пользователь выбрал этот конкретный пункт:

int selIndex = namesListBox.FindString("Soccer"); 

Это возвращает отсчитываемый от нуля индекс местоположения первого элемента, содержащего слово «футбол» в нем.

Теперь обработать выбранный индекс:

if (namesListBox.SelectedIndex != -1 && 
    namesListBox.SelectedIndex == selIndex) 
    MessageBox.Show("First item containing \"Soccer\" is selected."); 
else 
    MessageBox.Show("First item containing \"Soccer\" is not selected."); 

Кроме того, вполне возможно, что вы используете объект ListView, а не фактический ListBox. Если это так, вам придется придерживаться другого подхода.Этот пример еще использует ваш ListBox имя:

// This assumes that you cannot select multiple items, and that you 
// only have one column in your ListView. 
string selectedItem = namesListBox.SelectedItems[0].SubItems[0].Text; 

if (selectedItem.Trim() == "Soccer") // Continue as before... 

ли эту работу с вашим проектом?

EDIT: Ждут. Вы пытаетесь изменить выбранный элемент до «наилучшего» перед оценкой?

Если да, то это так:

int selIndex = namesListBox.SelectedIndex; 

namesListBox.Items.RemoveAt(selIndex); 
namesListBox.Items.Insert(selIndex, "best"); 

EDIT:

Не забудьте включить код, который не обрабатывает не выбор:

// Will not execute block of code if nothing is selected. 
if (namesListBox.SelectedIndex == -1) 
{ 
    MessageBox.Show("No item is selected."); 
    return; 
} 
0

Я предполагаю, что вы используете WPF, и вы используете ListBox следующим образом:

<ListBox x:Name="lstGames"> 
     <ListBoxItem Content="Soccor"/> 
     <ListBoxItem Content="Cricket"/> 
    </ListBox> 

Заменить этот best = namesListBox.SelectedItem.ToString(); с

best = ((ListBoxItem)namesListBox.SelectedItem).Content.ToString(); 

и соответственно другие тоже.

Потому что, если вы используете свойство itemssource ListBox и привязываете список слов только к строкам, то ваш настоящий код будет работать для вас, если вы проверили UpperCase/LowerCase.

Если вы используете какой-либо элемент, например объект игры с несколькими свойствами, то ваш код не будет работать, и многое другое можно сказать, если вы сообщите, как вы привязываете свой список к объекту коллекции.

0

Единственное, что я искал было как написать оператор if, и эта часть написанного вами кода отлично работает. Наверное, у меня было свободное пространство, или я просто переоценил это. Но во всяком случае, моя проблема решена. Большое спасибо.

string selectedItem = namesListBox.SelectedItem.ToString().Trim(); 

if (selectedItem == "Soccer") 
    MessageBox.Show("Soccer is selected."); 
else 
    MessageBox.Show("NOT SELECTED"); 
Смежные вопросы