在C#Combobox中设置所选项目

时间:2014-03-15 17:24:56

标签: c# winforms combobox

我到处都查了这个问题却找不到答案。我有一个枚举值的组合框,它应该从类属性中获取其初始值。请记住,它不是数据绑定到属性。当我使用当前所选项目设置类属性时,没有问题,但是当我尝试设置初始值时,组合框只是空白。

我已经对它进行了调试,似乎正确设置了SelectedItem,但它并没有直观地更新当前项目。这是我填充组合框的代码:

foreach(Gender gender in Enum.GetValues(typeof(Gender)))
{
    genderComboBox.Items.Add(gender);
}

我用它设置了它:

genderComboBox.SelectedItem = person.Gender;

我之前也尝试过这样做:

genderComboBox.DataSource = Enum.GetValues(typeof(Gender));

没有任何作用。我也尝试将enum属性转换为int并使用它来设置SelectedIndex。如果我添加断点并检查值,一切看起来都应该有效,但事实并非如此。我真的很困惑。

2 个答案:

答案 0 :(得分:1)

我好像已经弄清楚了。

SelectedItem的默认值为Gender.Male,与person.Gender的默认值相同。由于SelectedItem已经等于Gender.Male,因此它无法直观地更新控件并将其留空。当我将SelectedItem设置为null,然后将其设置为初始值时,它突然起作用。

答案 1 :(得分:0)

我使用您的代码进行了测试,但有一点不同。它运行没有问题。我没有从人的财产Gender中获取值,而是直接分配Gender常量:

genderComboBox.SelectedItem = Gender.Male;

这让我假设属性person.Gender没有有效的Gender值。将断点设置为genderComboBox.SelectedItem = person.Gender;行并观察person.Gender的值。这是对的吗?

注意:如果你这样声明Gender

enum Gender
{
    Male = 1
    Female =2
}

...然后Gender 0的默认值不是有效的Gender值。向None = 0添加值enum或将person中的属性初始化为有效值。