数据绑定在窗体加载之前不起作用 - 组合框项仅在窗体加载后初始化



我在winform上有两个组合蛋白,一个从列表" myList"中的所有值都我想从第一个的选定索引中获得所有值。但是我认为将项目加载到组合中存在问题。

public partial class Form1 : Form
{
    public Form1()
    {
        ComboBox box = new ComboBox();
        box.DropDownStyle = ComboBoxStyle.DropDownList;
        box.DataSource = MyList.ToList();
        box.SelectedIndexChanged += new EventHandler(ComboBox_SelectedIndexChanged);
        Tab_Page.Controls.Add(box);
        ComboBox box2 = new ComboBox();
        box2.DropDownStyle = ComboBoxStyle.DropDownList;
        foreach (object o in box.Items)
            {
                box2.Items.Add(o);
            }
        Tab_Page.Controls.Add(box2);
        box2.Items.RemoveAt(0);
        //This last line throws an error
        //"InvalidArgument=Value of '0' is not valid for 'index'."
    }}

错误是因为Box2在其集合中没有项目,即使Box在列出此错误目前具有所有值。

所以我想知道/何时将项目加载到项目集合中,我该如何解决此问题?

数据结合在表格和控制状态之前不起作用,在Created状态下,在可见表格和控件之前,它们不在Created状态中。

这里的问题是因为上述事实。您正在使用数据结合来将项目添加到构造函数中的第一个组合中,如上所述,数据结合在此不起作用,因此在循环中,Items的第一个组合的集合尚不空,尚未将项目添加到第二组合中。

您可以使用以下任何一个选项解决问题:

  • 将值直接添加到第一个组合的Itemsbox.Items.AddRange(MyList.ToArray());
  • 将代码放入表格的ShownLoad事件中。
  • 在尝试检索第一个组合的Items之前,使表格可见。例如,将值分配给第一个组合的DataSource后调用this.Show();。调用this.Show();this.Visible = true;会导致表格,其所有可见控件都会获得Created。因此,控件应可见,应该是可见形式的可见部分的成员。

最新更新