C# 使用 selectedValue 设置组合项

标签 c# winforms combobox

我正在动态创建一个这样的组合框:

public Control GenerateList(Question question)
{
    // Get a list with answer possibilities
    List<QuestionAnswer> answers = question.GetAnswers();

    // Get a collection of given answers
    Collection<QuestionnaireAnswer> givenAnswers = question.GetFilledAnswers();

    ComboBox cmb = new ComboBox();
    cmb.Name = "cmb";
    cmb.DataSource = answers;
    cmb.DisplayMember = "Answer";
    cmb.ValueMember = "Id";

    // Check an answer is given to the question
    if (givenAnswers != null && givenAnswers.Count > 0)
    {
        cmb.SelectedValue = givenAnswers[0].AnswerId;

    }

    cmb.DropDownStyle = ComboBoxStyle.DropDownList;
    cmb.SelectedIndexChanged += new EventHandler(cmb_SelectedIndexChanged);
    cmb.Leave += new EventHandler(cmb_Leave);

    return cmb;
}

问题是,在执行 cmb.SelectedValue = givenAnswers[0].AnswerId; 时,cmb.SelectedValue 始终为 null。

在调试和探索 answers(数据源)时,我看到 Id (ValueMember) 与 AnswerId(在 if 语句中)完全相同。两者具有相同的类型(long)和相同的值,但 SelectedValue 保持为空。

有什么我没看到的吗?

编辑:

组合框看起来是空的。当我将 cmb.SelectedValue = givenAnswers[0].AnswerId; 替换为 cmb.SelectedIndex = 0; 时,我得到一个 ArgumentOutOfRangeException。这虽然答案集合计数为 2。所以数据源不为空...非常强吧?

解决方案:

在将控件添加到窗体之前,无法设置 SelectedValue、SelectedIndex、SelectedItem 属性。将控件添加到窗体后,可以设置selectedValue、-Index和-Item属性。

最佳答案

解决方法:

在将控件添加到窗体之前,无法设置 SelectedValue、SelectedIndex、SelectedItem 属性。将控件添加到窗体后,可以设置selectedValue、-Index和-Item属性。

关于C# 使用 selectedValue 设置组合项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2864065/

相关文章:

c# - 用按钮计算表格位置

c# - 如何从 C# winform 应用程序检索屏幕分辨率?

c# - 防止 C# DataGridView 更改当前行的事件

c# - Webbrowser Control 中的 Excel 从其他文件中锁定 Excel

c# - 如何在 ComboBox 的开头和结尾显示 ComboBoxItem

c# - 填充 xaml 矩形倍数 solidcolorbrush

c# - WPF - 程序运行时图像不显示

c# - 如何使用 API 在 ASP C# 中实现 POST 和上传文件?

validation - 验证 CodeIgniter 中的组合框

c# - WPF MVVM ComboBox 标记选择