C# C Form.show()错误System.InvalidOperationException

C# C Form.show()错误System.InvalidOperationException,c#,forms,fill,C#,Forms,Fill,我试图用类列表填充三个组合框,但它给出了一个错误: System.Windows.Forms.dll中发生类型为“System.InvalidOperationException”的未处理异常 System.InvalidOperationException:调整自动填充列的大小时,无法执行此操作 这种错误偶尔会发生,但从来不会不发生 这一点要形成 代码: 这是代码的形式: private void btSair_Click(object sender, EventArgs e) { D

我试图用类列表填充三个组合框,但它给出了一个错误:

System.Windows.Forms.dll中发生类型为“System.InvalidOperationException”的未处理异常

System.InvalidOperationException:调整自动填充列的大小时,无法执行此操作

这种错误偶尔会发生,但从来不会不发生

这一点要形成

代码:

这是代码的形式:

private void btSair_Click(object sender, EventArgs e)
{
    DialogResult var;
    var = MessageBox.Show("Deseja fechar esta janela ? ", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
    if (var == DialogResult.Yes)
    {
        GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
        this.Close();   
    }
}

private void Catalogo_Load(object sender, EventArgs e)
{
    cliente = new KEYSERVICEClient();
    List<Catalogo> asdf = new List<Catalogo>();

    var listar = cliente.FillCombosCatalogo(Global.Id_empresa);

    for (int i = 0; i < listar.Count; i++)
    {
        cbFabricante.Items.Add(listar[i].fabricante);
        cbModelo.Items.Add(listar[i].modelo);
        cbNumera.Items.Add(listar[i].numeracao);
    }
}
FillComboCatalogo方法:

public List<CatalogoItens> FillCombosCatalogo(int id_empresa)
{
    SqlDataReader objReader;
    SqlCommand objcmd = null;

    vsql = "SELECT [ID_EMPRESA], [MODELO], [FABRICANTE],[NUMERACAO] As Identificador,[MODELO],[FABRICANTE], [NUMERACAO] FROM PRODUTOS_CHAVES WHERE @ID_EMPRESA = ID_EMPRESA";

    List<CatalogoItens> catag = new List<CatalogoItens>();

    if (this.Conectar())
    {
        try
        {
            objcmd = new SqlCommand(vsql, objCon);

            objcmd.Parameters.Add(new SqlParameter("@ID_EMPRESA", id_empresa));

            objReader = objcmd.ExecuteReader();

            while (objReader.Read())
            {
                CatalogoItens catalogo = new CatalogoItens()
                {
                    modelo = (objReader.GetString(1)),
                    fabricante = (objReader.GetString(2)),
                    numeracao = (objReader.GetString(3))
                };
                catag.Add(catalogo);
            }
                return catag;
        }
        catch
        {

        }
        finally
        {
            this.Desconectar();
        }
    }
    return null;
}

如果要更改组合框项目,并在循环中添加大量项目,请始终使用Suspend/ResumeLayout

例如:

若不这样做,系统将在每次添加项目时重新绘制组合框,而不是在添加所有项目后重新绘制一次


这可能是异常的原因。如果这没有帮助,请向我们提供您在这些组合框中设置的参数

只是好奇而已。。。你为什么要强迫GC收集?另外,请向我们提供FillComboScatalogo的代码,您永远不必强制执行GC收集。这一切都是自动处理的,如果不是你做错了什么。使用FillComboScatalogo方法进行后期编辑你是否使用了调试工具来逐步完成你的代码?我对所有不必要的代码进行了注释,问题甚至是表单。Show@MatheusSaviczki那么,combobox的属性是什么?原始属性。只将DropDownStyle修改为DropDownList,正如Matt所说,尝试使用调试工具,因为如果不更改任何属性,就不会出现类似这样的异常。我创建了一些表单,树型组合框中填充了1k个项目,但什么都没有发生。自动填充列-是什么?它在哪里?我注释了所有不必要的代码,问题甚至是form.Show
public List<CatalogoItens> FillCombosCatalogo(int id_empresa)
{
    SqlDataReader objReader;
    SqlCommand objcmd = null;

    vsql = "SELECT [ID_EMPRESA], [MODELO], [FABRICANTE],[NUMERACAO] As Identificador,[MODELO],[FABRICANTE], [NUMERACAO] FROM PRODUTOS_CHAVES WHERE @ID_EMPRESA = ID_EMPRESA";

    List<CatalogoItens> catag = new List<CatalogoItens>();

    if (this.Conectar())
    {
        try
        {
            objcmd = new SqlCommand(vsql, objCon);

            objcmd.Parameters.Add(new SqlParameter("@ID_EMPRESA", id_empresa));

            objReader = objcmd.ExecuteReader();

            while (objReader.Read())
            {
                CatalogoItens catalogo = new CatalogoItens()
                {
                    modelo = (objReader.GetString(1)),
                    fabricante = (objReader.GetString(2)),
                    numeracao = (objReader.GetString(3))
                };
                catag.Add(catalogo);
            }
                return catag;
        }
        catch
        {

        }
        finally
        {
            this.Desconectar();
        }
    }
    return null;
}
cbFabricante.SuspendLayout();
cbModelo.SuspendLayout();
cbNumera.SuspendLayout();
for (int i = 0; i < listar.Count; i++)
{
    cbFabricante.Items.Add(listar[i].fabricante);
    cbModelo.Items.Add(listar[i].modelo);
    cbNumera.Items.Add(listar[i].numeracao);
}
cbFabricante.ResumeLayout();
cbModelo.ResumeLayout();
cbNumera.ResumeLayout();