【问题标题】:Setting selected item in C# Combobox在 C# Combobox 中设置选定项
【发布时间】:2014-03-15 17:24:56
【问题描述】:

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

我已经对其进行了调试,似乎 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 你是对的,它运行良好。
  • 难怪我在网上找不到解决方案。似乎代码对除了我之外的每个人都很好。可能与 UserControl 中的组合框有关吗?

标签: c# winforms combobox


【解决方案1】:

我好像明白了。

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

【讨论】:

  • SelectedItem 的默认值是Gender.Male”到底是什么意思? SelectedItem 的类型为 object,其默认值为 null。我无法在属性窗口中设置除 (none) 之外的其他默认值。
  • 当我设置组合框的DataSource 属性时,它会自动选择第一个枚举值作为SelectedItem。这没有意义,但这就是正在发生的事情。
【解决方案2】:

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

genderComboBox.SelectedItem = Gender.Male;

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

注意:如果您像这样声明Gender

enum Gender
{
    Male = 1
    Female =2
}

...那么Gender0 的默认值不是有效的Gender 值。将值 None = 0 添加到 enum 或将 person 中的属性初始化为有效值。

【讨论】:

  • 是的,当我添加断点并检查person.Gender 的值时,我找到了一个有效的属性。当我调试它时,一切似乎都有效,但无论如何它的行为非常奇怪。
猜你喜欢
  • 1970-01-01
  • 2012-03-12
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-19
相关资源
最近更新 更多