我在 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 在引发此错误时具有 List 中的所有值。
所以我想知道项目到底如何/何时加载到 Items 集合中以及如何解决这个问题?
在表单和控件进入之前,数据绑定将不起作用Created https://msdn.microsoft.com/en-us/library/system.windows.forms.control.created(v=vs.110).aspx状态并且在表单和控件变得可见之前它们不处于其中Created
status.
这里的问题是由于上述事实。您正在使用数据绑定将项目添加到构造函数中的第一个组合,如上所述,数据绑定将不起作用,因此在循环中,Items
第一个组合的集合尚为空,不会将任何项目添加到第二个组合中。
您可以使用以下任一选项解决问题:
- 直接添加值
Items
第一个组合:box.Items.AddRange(MyList.ToArray());
- 将代码放入
Shown
or Load
表单的事件。
- 在尝试检索之前使表单可见
Items
第一个组合。例如调用this.Show();
赋值给之后DataSource
第一个组合。呼唤this.Show();
or this.Visible = true;
导致窗体及其所有可见控件得到Created
。因此,控件应该是可见的,并且应该是可见窗体的可见部分的成员。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)