我在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
的第一个组合的集合尚不空,尚未将项目添加到第二组合中。
您可以使用以下任何一个选项解决问题:
- 将值直接添加到第一个组合的
Items
:box.Items.AddRange(MyList.ToArray());
- 将代码放入表格的
Shown
或Load
事件中。 - 在尝试检索第一个组合的
Items
之前,使表格可见。例如,将值分配给第一个组合的DataSource
后调用this.Show();
。调用this.Show();
或this.Visible = true;
会导致表格,其所有可见控件都会获得Created
。因此,控件应可见,应该是可见形式的可见部分的成员。