在C# Combobox中设置所选项目

3
我在各处查找了此问题,但无法找到答案。我有一个枚举值的下拉框,它应该从类属性获取其初始值。请注意,它没有与属性绑定。当我使用当前选定的项目设置类属性时,没有问题,但是当我尝试设置初始值时,下拉框为空白。
我已经进行了调试,似乎SelectedItem已正确设置,但它没有可视化更新当前项目。以下是用于填充下拉框的代码:
foreach(Gender gender in Enum.GetValues(typeof(Gender)))
{
    genderComboBox.Items.Add(gender);
}

我使用以下代码进行设置:

genderComboBox.SelectedItem = person.Gender;

我之前也尝试过这样做:

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

什么都不起作用。我也尝试将枚举属性转换为int,并使用它来设置SelectedIndex。如果我添加断点并检查值,一切似乎都应该可以工作,但实际上并没有。我对此感到非常困惑。


这很奇怪,因为我在那段代码上没有任何问题。 - Steve
对我来说也是一样。这段代码运行良好。我相信问题出在其他地方。 - Dmitry
@Steve,你说得对,它完美地工作了。 - Alessandro D'Andria
难怪我在网上找不到解决方案。似乎这段代码对其他人都没问题,只有我有问题。这可能与ComboBox位于UserControl内有关吗? - Zayats
2个回答

1
我似乎已经弄清楚了。 SelectedItem 的默认值是 Gender.Male,与 person.Gender 的默认值相同。由于 SelectedItem 已经等于 Gender.Male,它没有在控件上进行可视化更新,而是将其留空。当我将 SelectedItem 设置为 null,然后再将其设置为初始值时,它突然就起作用了。

“SelectedItem”的默认值是“Gender.Male”是什么意思?“SelectedItem”是“object”类型,其默认值为“null”。我无法在属性窗口中设置其他默认值,只能选择“(none)”。 - Olivier Jacot-Descombes
当我设置组合框的“DataSource”属性时,它会自动选择第一个枚举值作为“SelectedItem”。这没有意义,但这就是正在发生的事情。 - Zayats

0

我用你的代码进行了一个小小的测试,跑得非常好。不过,我没有从人的属性Gender获取值,而是直接赋值给Gender常量:

genderComboBox.SelectedItem = Gender.Male;

这让我认为属性person.Gender没有有效的Gender值。在genderComboBox.SelectedItem = person.Gender;这一行设置断点并观察person.Gender的值。它正确吗?
注意:如果您像这样声明了Gender
enum Gender
{
    Male = 1
    Female =2
}

若默认值的Gender0,那么它不是一个有效的Gender值。你可以在enum中添加None = 0的值,或者在person属性中初始化为一个有效值。


是的,当我添加断点并检查 person.Gender 的值时,我发现一个有效的属性。在调试时一切似乎都是有效的,但它仍然表现得非常奇怪。 - Zayats

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接