6

我用枚举中的值填充了一个组合框。

现在组合框是文本对吗?所以我使用了一个getter和一个setter。我在阅读文本时遇到问题。

这是代码:

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. 所以你可以在属性 getter 和 setter 中使用它。

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

编辑:您可能必须检查 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 回答