代码之家  ›  专栏  ›  技术社区  ›  Ivan-Mark Debono

使用List IndexOf时未设置ComboBox SelectedIndex

  •  2
  • Ivan-Mark Debono  · 技术社区  · 6 年前

    我正在以编程方式创建一个组合框,如下所示:

    var cbo = new ComboBox {
        DataSource = mylist,
        SelectedIndex = mylist.IndexOf(myvalue)
    };
    

    我没有设置 ValueMember 使值成为对象本身。当我执行上述操作时,在 SelectionIndex 线:

    invalidArgument=值“3”对于“selectedIndex”无效。参数名称:selectedIndex

    是因为组合框仍在创建,因此 DataSource 是否仍然未填充?如果是,设置索引的正确方法是什么?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Reza Aghaei    6 年前

    在控件可见之前,DataBiding将不工作。因此,您需要将代码更改为:

    var mylist = Enumerable.Range(1, 5).ToList();
    var myvalue = 2;
    var cbo = new ComboBox();
    cbo.HandleCreated += (obj, args) =>
    {
        BeginInvoke(new Action(() =>
        {
            cbo.DataSource = mylist;
            cbo.SelectedIndex = mylist.IndexOf(myvalue);
        }));
    };
    this.Controls.Add(cbo);
    

    一旦控件可见,初始化代码将运行并 ComboBox 将由数据源项填充,其所选索引将按预期设置。

    推荐文章