English 中文(简体)
在C#中获取组合框文本
原标题:
  • 时间:2008-11-24 19:53:20
  •  标签:

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

现在一个组合框是文本,对吧?因此我使用了一个getter和一个setter。我在阅读文本时遇到了问题。

这是代码:

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

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

有人看到我做错了什么吗?

EDIT: I have come to the conclusion that the problem lies in timing. The point in time at which I summon the text is indeed after I changed the combobox, but still before that value is parsed as a value. Problem fixed in a different way now, thanks for all the ideas.

最佳回答

我刚刚创建了一个简单的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());
    }
}
问题回答
string selectedText = this.ComboBox.GetItemText(this.ComboBox.SelectedItem);

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

Set the DropDownStyle of the ComboBox to DropDownList. This will ensure that only the elements already in the list can be selected (no need to check that the text actually is a valid value). Then if you use Enum.GetValues(typeof(BookType)) to fill the combobox then typeComboBox.SelectedItem property will be a value of BookType. So you can use this in the property getter and setter.

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

编辑:您可能需要检查SelectedItem属性是否为空。

下拉框从索引-1开始,没有文本,因此为空字符串:""。

然后我把索引更改为我需要的BookType,然后我得到了错误的输出...

你尝试过使用this.typeComboBox.SelectedText而不是typeComboBox.Text吗?

this.typeComboBox.SelectedItem.ToString()




相关问题
热门标签