WinForm ComboBox SelectedValue 属性与 SelectedIndex

Posted

技术标签:

【中文标题】WinForm ComboBox SelectedValue 属性与 SelectedIndex【英文标题】:WinForm ComboBox SelectedValue property vs SelectedIndex 【发布时间】:2018-02-14 08:27:52 【问题描述】:

我正在为组合框中的每个项目添加一个“索引”对象

foreach(索引中的变量索引) UniqueIndexComboBox.Items.Add(index);

当用户从下拉列表中选择一个索引项时,会触发以下事件。我不确定有什么区别。

private void UniqueIndexComboBox_SelectedValueChanged(object sender, EventArgs e) private void UniqueIndexComboBox_SelectedIndexChanged(object sender, EventArgs e)

当我整合以下属性时,SelectedValue 始终为 null,但我仍然可以通过使用 SelectedIndex 值作为项目列表的索引来访问选定的索引值。

使用 WinForm ComboBox,为什么会选择 ? UniqueIndexComboBox.Items[UniqueIndexComboBox.SelectedIndex] == null 错误的 ? UniqueIndexComboBox.SelectedValue == null 真的

为什么 SelectedValue 选项也不起作用? DropDownStyle 属性的值是否相关?

【问题讨论】:

SelectedValue 需要ValueMember 属性并且使用循环填充ComboBox 不会设置ValueMember,您需要将索引作为数据源。 正如 Berkay 所说,SelectedIndex 属性是项目列表中当前选定项目的从零开始的索引,如果没有选择项目,则为 -1。不需要为值添加(数据库启发?)索引。有关详细信息,请参阅 MSDN 文档。如果SelectedIndex >= 0,则UniqueIndexComboBox.Items[UniqueIndexComboBox.SelectedIndex] 始终为非空值,因为选择了一个项目。如果 'ComboBox' 是数据绑定的,则使用 SelectedValue 【参考方案1】:

SelectedIndex 是从零开始的索引号(间接位置号) SelectedValue 是所选项目的实际值(用户不可见)。在您的情况下, SelectedValue 始终为 null,因为您没有按如下方式提供它。

要实现 ComboBox 的 SelectedValue,组合框应该设置它的 DataSource 属性而不是 Items.Add() 方法

例如

        var items = new List<object>();
        for (int i = 1; i <= 10; i++)
        
            items.Add(new  Value = i, Text = "Text "+i );
        

        comboBox1.DataSource = items;
        comboBox1.DisplayMember = "Text";
        comboBox1.ValueMember = "Value";

【讨论】:

以上是关于WinForm ComboBox SelectedValue 属性与 SelectedIndex的主要内容,如果未能解决你的问题,请参考以下文章

C# winform 下拉列表控件(comboBox)

Multi-Select ComboBox 设置 Selected 属性 True

C#winform,combobox添加可筛选功能

C# winform 编程下ComboBox 怎么给他绑定三个值?

c#winform中一个combobox的datasource绑定给另一个combobox

Winform中DataGridView网格添加ComBoBox