如何检索ListBox中的每个项目C#

时间:2015-10-23 19:12:33

标签: c# listbox

我是C#的新手,尽管去年我确实占了四分之一的Java。我明天有一份作业,所以这是我的问题。我做了一个示例小程序,​​所以我希望能得到我正在寻找的东西。我想知道,我怎么看看listBox并说,例如,如果选择了足球项目,做一件事,但如果选择了其他任何东西,还要做另一件事吗?我将上传一段不能完成它应该做的代码,你们都可以称我为愚蠢,然后给我答案。

    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();
    }
}

}

每次这段代码运行时,我很久以前就会很久......这不是我想看到的。任何帮助将不胜感激,我即将放弃这个计划。这不是实际的程序,一个更复杂,我只是做了一个来展示我的问题......提前致谢

3 个答案:

答案 0 :(得分:0)

我假设您正在使用WPF,并且您正在使用ListBox:

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

将此best = namesListBox.SelectedItem.ToString();替换为

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

因此也是其他人。

因为如果你使用ListBox的itemssource属性并绑定说明只有字符串的列表,那么如果你检查了UpperCase / LowerCase,那么你现在的代码肯定会起作用。

如果您正在使用某个项目,例如具有多个属性的Game对象,那么您的代码将无法正常工作,如果您告诉如何将列表框绑定到集合对象,则可以说更多。

答案 1 :(得分: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");

这将返回包含单词“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...

这适用于您的项目吗?

编辑: 等待。您是否尝试在评估之前将所选项目更改为“最佳”?

如果是这样,那就这样做:

int selIndex = namesListBox.SelectedIndex;

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

编辑:

请确保包含不处理选择的代码:

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

答案 2 :(得分:0)

我唯一想要的是如何编写if语句,并且您编写的这部分代码完美无缺。我想我把空白扔掉了,或者我只是在思考它。但无论如何,我的问题已经解决了。非常感谢你。

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

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