ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c# – 数据绑定在Form Load之前不起作用 – 仅在Form加载后初始化ComboBox项

2019-06-28 02:04:39  阅读:179  来源: 互联网

标签:c winforms combobox


我在winform上有两个ComboBox,一个包含List“MyList”中的所有值,另一个我希望从第一个选定索引中获取所有值.但我认为将项目加载到ComboBox中时会出现问题.

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状态之前,在表单和控件可见之前,数据绑定将不起作用,它们不处于“已创建”状态.

这里的问题是由于上述事实.您正在使用数据绑定将项目添加到构造函数中的第一个组合,并且如上所述,数据绑定将无法在那里工作,因此在循环中,第一个组合的Items集合是空的,并且没有项目将添加到第二个组合.

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

>直接向第一个组合的项添加值:box.Items.AddRange(MyList.ToArray());
>将代码放在表单的“已显示”或“加载”事件中.
>在尝试检索第一个组合的项目之前,使表单可见.例如调用this.Show();将值分配给第一个组合的DataSource之后.调用this.Show();或者.Visible = true;导致窗体及其所有可见控件都被创建.因此控件应该是可见的,并且应该是可见形式的可见部分的成员.

标签:c,winforms,combobox
来源: https://codeday.me/bug/20190628/1310948.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有