0

在这里,我创建了一个 for 循环以在组合框中列出从 1 到 30 的数字范围,但是当我尝试将组合框中的选定项目显示到 MessageBox 中时,它返回一个空值。我怎样才能让它返回从组合框中选择的数字?这是我的代码:

    string selectedNumber;

    public Form1()
    {
        InitializeComponent();

        for (int i = 1; i <= 30; i++)
        {
            string[] numbers= { i.ToString() };
            comboBox1.Items.AddRange(numbers);
        }

        selectedNumber = comboBox1.SelectedText;

    }

    private void button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show(selectedNumber);
    }
}
4

4 回答 4

2

原因很明显,您没有选择文本

您必须先选择组合框中的任何项目。为此,请尝试以下任何方法

  1. 设置SelectedIndex为某个有效的索引
  2. 通过代码设置SelectedItem为组合框中的有效项
  3. 通过单击选择组合框中的项目

然后使用以下代码

MessageBox.Show(comboBox1.SelectedText); or

if(comboBox1.SelectedItem != null)//check for null since `SelectedItem` can be null when nothing selected
    MessageBox.Show(comboBox1.SelectedItem.ToString());

注意:正如@tim 在评论中指出的那样SelectedTextDropDownStyle设置为DropDownList. 在这种情况下,您必须使用SelectedItem方法

于 2013-08-17T21:51:30.467 回答
1

正如一些人指出的那样,在ComboBox分配SelectedText给时没有选择任何内容selectedNumber。我会尝试两件事:

首先,不要AddRange每次都通过循环调用 - 在循环中构建数组,然后一旦循环退出,您就可以使用AddRange. 我也会使用List<string>

List<string> numbers = new List<string>();

for (int i = 1; i <= 30; i++)
{

    numbers.Add(i.ToString());
}

comboBox1.AddRange(numbers);

其次,在您的按钮单击事件中,显示选定的文本:

MessageBox.Show(comboBox1.SelectedText);

如果comBox1's DropDownStyle 设置为DropDownListSelectedText将给出一个空字符串。在这种情况下,这样的事情可能会有所帮助:

MessageBox.Show(comboBox1.SelectedItem.ToString());

实际上,您可能希望处理相应的选择更改事件,ComboBox因为您可能希望在程序中对它做一些事情,但看起来您现在只是在尝试一些事情。

编辑添加

请注意,正如 Sriram 所说,SelectedItem可以为 null,因此如果您使用的是 Sriram 或 Przemyslaw 的代码SelectedItem而不是SelectedText.

于 2013-08-17T21:54:12.560 回答
1

在这里,使用空检查:

private void button1_Click(object sender, EventArgs e)
{
    var selectedItem = comboBox1.SelectedItem ?? "";

    MessageBox.Show(selectedItem.ToString());
}
于 2013-08-17T21:56:48.480 回答
0

或者,你可以试试这个

                for (int x = 0; x <= 30; x++)
                  comboBox1.Items.Add(x.ToString());

我觉得简单多了

于 2013-08-17T23:45:35.897 回答