在C#中获取组合框文本

时间:2008-11-24 19:53:21

标签: c# .net winforms combobox

我用Enum的值填充了一个组合框。

现在组合框是正确的吗?所以我正在使用一个吸气剂和一个二传手。我在阅读文本时遇到了问题。

以下是代码:

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

出于某种原因,当我在组合框中选择一个项目时,this.typeComboBox.Text总是返回一个空字符串。

有人看到我做错了吗?

编辑:我得出结论,问题在于时机问题。 我召唤文本的时间点确实是在我更改了组合框后,但仍然在该值被解析为值之前。 现在以不同的方式解决问题,感谢所有的想法。

6 个答案:

答案 0 :(得分:34)

试试这个。这对我有用。

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

GetItemText方法分析项目并返回绑定到该项目的文本。

答案 1 :(得分:2)

将ComboBox的DropDownStyle设置为DropDownList。这将确保只能选择列表中已有的元素(无需检查文本实际上是否为有效值)。 然后,如果您使用Enum.GetValues(typeof(BookType))填充组合框,则typeComboBox.SelectedItem属性的值为BookType。所以你可以在属性getter和setter中使用它。

总结一下。只要使用DropDownList样式,就不必将组合框绑定到文本值列表。使用SelectedItem属性获取所需类型的项目,而不是检查Text属性。

编辑:您可能必须检查SelectedItem属性是否为null

答案 2 :(得分:1)

组合框从索引-1开始,它没有文本,因此是一个空字符串:“”

然后我将索引更改为我需要的BookType,然后输出错误的结果......

答案 3 :(得分:1)

你应该试试这个.typeComboBox.SelectedItem.ToString()

答案 4 :(得分:1)

您是否尝试过使用this.typeComboBox.SelectedText代替typeComboBox.Text

答案 5 :(得分:0)

我刚刚创建了一个简单的窗体,一切都对我有用。这是代码。

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