如何在组合框中使用案例作为字符串执行switch语句?

时间:2013-11-30 04:33:47

标签: c# combobox switch-statement

这就是我的组合框中的内容。

Runescape
Maplestory
League of Legends

以下是我尝试使用switch语句的代码。

private void button1_Click(object sender, EventArgs e)
{
    switch (comboBox1.SelectedIndex)
    {
        case "Runescape":
            MessageBox.Show("You are playing RS");
            break;

        case "Maplestory":
            MessageBox.Show("You are playing MS");
            break;

        default:
            MessageBox.Show("You're playing League");
            break;
    }
}

它给了我一个错误,它不会让我隐式地将字符串转换为int。

我想将这些案例用作字符串而不是数字。我该怎么做?


此外,只是出于好奇,如果它的作用,我们可以作为一个案例而不是一个字符串的一部分。假装组合框说“Runescape 3”而不是“Runescape”。我不确定C#是否可以识别字符串的一部分。

case "Runescape":
        MessageBox.Show("You are playing RS");
        break;

4 个答案:

答案 0 :(得分:5)

您可以使用stringint进行比较。

1。如果您希望compare String使用SelectedItem控件的ComboBox属性。

试试这个:

switch (comboBox1.SelectedItem.ToString().Trim())
    {
        case "Runescape":
            MessageBox.Show("You are playing RS");
            break;

        case "Maplestory":
            MessageBox.Show("You are playing MS");
            break;

        default:
            MessageBox.Show("You're playing League");
            break;
    }

2。如果您希望compare Index使用SelectedIndex控件的ComboBox属性

试试这个:

        switch (comboBox1.SelectedIndex)
        {
            case 0:
                MessageBox.Show("You are playing RS");
                break;

            case 1:
                MessageBox.Show("You are playing MS");
                break;

            default:
                MessageBox.Show("You're playing League");
                break;
        }

3。如果您只想从SelectedItem使用ComboBox功能获取Split()的第一部分。

试试这个:

           switch (comboBox1.SelectedItem.ToString().Split(' ')[0])
            {
                case "Runescape":
                    MessageBox.Show("You are playing RS");
                    break;

                case "Maplestory":
                    MessageBox.Show("You are playing MS");
                    break;

                default:
                    MessageBox.Show("You're playing League");
                    break;
            }

答案 1 :(得分:3)

Comboboxes有三种方法可以从中获得你想要的东西:

  • SelectedItem:与索引关联的实际对象。
  • SelectedIndex:所选内容的整数(从零开始)索引。
  • SelectedValueSelectedItem的值(使用SelectedValuePath)。

答案 2 :(得分:2)

试试这个:

switch (Convert.ToString(comboBox1.SelectedItem))
{
  //...
}

使用Convert.ToString()以更安全的方式将其转换为字符串。

答案 3 :(得分:2)

只是一个建议,但您当前的方法不是很可扩展。添加更多游戏需要您添加到此switch语句。此外,从外观上看,开始播放所选游戏所需的逻辑将与您的UI代码紧密结合。最好定义一个接口,比如'IGame',它可以定义一个Name属性和一个StartPlaying()函数。然后可以将这三个游戏定义为实现此接口的三个单独的类。然后ComboBox可以绑定到IGame对象的集合。单击按钮时,无论用户选择哪个游戏,我们都必须调用combobox1.SelectedItem.StartPlaying()。

我已经离开WinForms世界一段时间了,所以如果没有首先进行类型检查并将combobox1.SelectedItem转换为IGame,我不能100%确定是否可行。但无论如何,我认为你会发现这种方法在未来会减少挫败感。

我知道这不是你问题的直接答案,但对于像这样的东西,多态性很棒。