6

Enum からの値でコンボボックスを埋めました。

コンボボックスはテキストですよね?だから私はゲッターとセッターを使用しています。テキストを読むのに問題があります。

コードは次のとおりです。

public BookType type
{
    get
    {
        return (BookType)Enum.Parse(typeof(BookType), this.typeComboBox.Text);
    }
    set
    {
        this.typeComboBox.Text = value.ToString();
    }
}

コンボボックスでアイテムを選択すると、何らかの理由でthis.typeComboBox.Text常に空の文字列が返されます。

誰かが私が間違っていることを見ていますか?

編集:問題はタイミングにあるという結論に達しました。テキストを呼び出す時点は、確かにコンボボックスを変更した後ですが、その値が値として解析される前です。問題は別の方法で修正されました。すべてのアイデアに感謝します。

4

6 に答える 6

35

これを試して。これは私のために働いた。

string selectedText = this.ComboBox.GetItemText(this.ComboBox.SelectedItem);

GetItemText メソッドはアイテムを分析し、そのアイテムにバインドされたテキストを返します。

于 2010-08-05T11:22:20.590 に答える
2

DropDownStyleComboBoxの を に設定しDropDownListます。これにより、リストに既に存在する要素のみを選択できるようになります (テキストが実際に有効な値であることを確認する必要はありません)。Enum.GetValues(typeof(BookType))次に、コンボボックスを埋めるために使用すると、typeComboBox.SelectedItemプロパティの値は になりますBookType。したがって、プロパティのゲッターとセッターでこれを使用できます。

要約すると。DropDownList スタイルを使用している限り、コンボボックスをテキスト値のリストにバインドする必要はありません。Text プロパティをチェックする代わりに、SelectedItem プロパティを使用して、目的のタイプのアイテムを取得します。

編集: null の SelectedItem プロパティを確認する必要がある場合があります

于 2008-11-24T20:18:45.180 に答える
1

コンボボックスはインデックス -1 から始まります。このインデックスにはテキストがないため、空の文字列 "" になります。

次に、インデックスを必要な BookType に変更すると、間違った出力が得られます...

于 2008-11-24T20:07:22.737 に答える
1

this.typeComboBox.SelectedItem.ToString() を試してください。

于 2008-11-24T20:11:20.297 に答える
1

this.typeComboBox.SelectedTextの代わりに使用してみましたtypeComboBox.Textか?

于 2008-11-24T20:11:54.710 に答える
0

シンプルな Windows フォームを作成したところ、すべて問題なく動作しました。これがコードです。

public enum Test
{
    One, Two, Three
}

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        this.comboBox1.DataSource = Enum.GetNames(typeof(Test));
    }

    public Test Test
    {
        get 
        {
            return (Test)Enum.Parse(typeof(Test), this.comboBox1.Text);
        }
        set
        {
            this.comboBox1.Text = value.ToString();
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show(this.Test.ToString());

        this.Test = Test.Two;

        MessageBox.Show(this.Test.ToString());
    }
}
于 2008-11-24T20:14:43.953 に答える