2016-04-28 17 views
-1

Ich versuche, drei ComboBox mit einer Klasse-Liste füllen, aber es einen Fehler geben:C# Form.show() Fehler System.InvalidOperationException

An unhandled exception of type 'System.InvalidOperationException' occurred in System.Windows.Forms.dll

"System.InvalidOperationException: This operation cannot be performed while an auto-filled column is being resized"

Dieser Fehler tritt gelegentlich, doch irgendwie nie geschehen.

Und dieser Punkt form.Show();

Code:

Catalogo form = new Catalogo(); 
form.Show(); 

Und das ist die Form von Code:

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 Methode:

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; 
} 
+0

Nur neugierig ... Warum zwingen Sie den GC zu sammeln? Bitte geben Sie auch den Code für 'FillCombosCatalogo()' –

+0

an, den ich benutze, um zu säubern. –

+1

Sie sollten niemals eine GC-Sammlung erzwingen. Das ist alles automatisch erledigt, und wenn es nicht ist, machst du etwas falsch. –

Antwort

0

Wenn Sie möchten, CH Ange Combobox Elemente, und fügen Sie viele von ihnen (in einer Schleife) immer Suspend/ResumeLayout.

Eg .:

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(); 

Wenn Sie das nicht tun, wird das System neu zu zeichnen Combobox jedes Mal, wenn Sie ein Element hinzu, anstatt sie einmal neu zu zeichnen - nach allen Elementen hinzufügen.

Es könnte die Ursache der Ausnahme sein. Es wird nicht helfen, geben Sie uns die Parameter, die Sie in diesen Comboboxen setzen

+0

Humm es funktioniert nicht –

+0

@MatheusSaviczki so, was sind die Eigenschaften der Combobox? – Carnifex

+0

die ursprünglichen Eigenschaften. Ändern Sie den DropDownStyle nur in DropDownList –

Verwandte Themen