winforms 取得C#中的下拉式方块文字

fquxozlt  于 2022-11-17  发布在  C#
关注(0)|答案(6)|浏览(145)

我用枚举中的值填充了一个组合框。
组合框是文本,对吧?所以我用了getter和setter,我阅读文本时遇到了问题。
代码如下:

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

由于某种原因,当我选择组合框上的项时,this.typeComboBox.Text总是返回空字符串。
有人看出我哪里做错了吗?
编辑:我得出的结论是,问题出在时间上。我调用文本的时间点确实是在我改变组合框之后,但仍然在该值被解析为值之前。现在问题以不同的方式解决了,感谢所有的想法。

ndh0cuux

ndh0cuux1#

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

GetItemText方法会分析项目,并传回系结至该项目之的文字。

yc0p9oo0

yc0p9oo02#

将ComboBox的DropDownStyle设置为DropDownList。这将确保只有列表中已经存在的元素可以被选择(不需要检查文本是否为有效值)。然后,如果使用Enum.GetValues(typeof(BookType))填充ComboBox,则typeComboBox.SelectedItem属性将为BookType。因此,可以在属性getter和setter中使用此属性。
总之,只要使用DropDownList样式,就不必将组合框绑定到文本值列表。使用SelectedItem属性获取所需类型的项,而不是检查Text属性。
编辑:您可能必须检查SelectedItem属性是否为空

i86rm4rw

i86rm4rw3#

该组合框从索引-1开始,它没有文本,因此是一个空字符串:““
然后我将索引更改为我需要的BookType,然后我得到了错误的输出...

h6my8fg2

h6my8fg24#

您是否尝试过使用this.typeComboBox.SelectedText而不是typeComboBox.Text

3duebb1j

3duebb1j5#

this.typeComboBox.SelectedItem.ToString()
xqk2d5yq

xqk2d5yq6#

我刚刚创建了一个简单的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());
    }
}

相关问题