0

ここでは、コンボ ボックスに 1 から 30 までの範囲の数値をリストする for ループを作成しましたが、コンボ ボックスから選択した項目をメッセージ ボックスに表示しようとすると、null 値が返されます。コンボボックスから選択した数値を返すにはどうすればよいですか? これが私のコードです:

    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がコメントで指摘したように、に設定するSelectedText とアプローチは機能しません。その場合、アプローチを使用する必要がありますDropDownStyleDropDownListSelectedItem

于 2013-08-17T21:51:30.467 に答える
1

何人かが指摘しているように、にComboBox割り当てるときにSelectedText何も選択されていませんselectedNumber。私は2つのことを試します:

まず、ループを介して毎回呼び出さないでください。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の DropDownStyle が に設定されている場合DropDownListSelectedTextは空の文字列を返します。その場合、次のようなものが役立つ場合があります。

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

実際には、対応する選択変更イベントをComboBoxプログラムで処理したいと思うかもしれませんが、現在いくつかのことを試しているようです。

追加するために編集

Sriram が言ったSelectedItemように、null になる可能性があることにSelectedItem注意してくださいSelectedText

于 2013-08-17T21:54:12.560 に答える
1

ここでは、null チェックを使用します。

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 に答える