Me escribió el siguiente método para cargar un cuadro de lista con los valores que no se han cargado, pero ya me estoy haciendo una referencia a Objeto no establecida como instancia de un objeto de excepción cuando la asignación de los siguientes. Cualquier información sería de gran ayuda. Gracias.

lbxCabinetName.Items.Add(cabinetsCurrentNotUsed[i].ToString());

//Defined outside a method
List<string> cabinetsCurrentNotUsed; 

//Set value in the constructor
cabinetsCurrentNotUsed = new List<string>();

Aquí es todo el procedimiento.

    private void selectCabinetToAdd()
    {

        //Loop through all server and form cabinet types to see if there are matches
        for (int x = 0; x < opticalFile.serverCabinetNames.Count; x++)
        {
            bool cabinetExists = false;
            for (int i = 0; i < opticalFile.CabinetValues.Count; i++)
            {
                if (opticalFile.serverCabinetNames[x].ToString() == opticalFile.CabinetValues[i].ToString())
                {
                    cabinetExists = true;
                }
            }
            //Add cabinets not used to cabinetsCurrentNotUsed List
            if (!cabinetExists)
            {
                cabinetsCurrentNotUsed.Add(opticalFile.serverCabinetNames[x].ToString());
            }
        }

        //Send cabinetsCurrentNotUsed List to list box
        for (int i = 0; i < cabinetsCurrentNotUsed.Count; i++)
        {
            lbxCabinetName.Items.Add(cabinetsCurrentNotUsed[i].ToString());
        }
    }
  • Es posible lbxCabinetName es null? Esa es la única posibilidad que yo pueda ver.
  • Que es posible, pero no es ese el punto de adición de elementos? ¿Cómo puedo asegurarme de que el lbxCabinetName cuadro de lista no es nulo, así que puedo agregar un elemento? También he quitado la .ToString(), he añadido la esperanza de un longshot revisión.
  • Bueno, realmente si su función requiere que sea no nulo, usted debe poner algo como esto en el comienzo de su función: si (lbxCabinetName == null) throw new ArgumentNullException(«lbxCabinetName no puede ser null»);
InformationsquelleAutor JoBaxter | 2012-05-22

2 Comentarios

  1. 2

    Usted está tratando de agregar un valor null para el control listbox.

    Lugar de

    for (int i = 0; i < cabinetsCurrentNotUsed.Count; i++)
    {
         lbxCabinetName.Items.Add(cabinetsCurrentNotUsed[i].ToString());
    }

    uso

    foreach (string s in cabinetsCurrentNotUsed)
    {
        if(s != null)
              lbxCabinetName.Items.Add(s);
    }

    NOTA

    Esta parte no es relavant a la pregunta. Pero en su interior para el bucle después de establecer cabinetExists = true; usted puede salir del bucle interno (si al menos uno se cumple la condición de que usted puede asegurarse de que el cabinetExists es cierto. usted no tiene que comprobar el resto de los elementos del bucle interno)

    EDITAR

    private void selectCabinetToAdd()
    {
            foreach (string sc in serverCabinetNames)
            {
                bool cabinetExists = false;
                foreach (string cv in CabinetValues)
                {
                    if (sc == cv)
                    {
                        cabinetExists = true;
                        break;
                    }                    
                }
    
                if (!cabinetExists)
                {
                    cabinetsCurrentNotUsed.Add(sc);
                }
    
            }
    
            foreach (string ccnu in cabinetsCurrentNotUsed)
            {
                if (ccnu != null)
                    lbxCabinetName.Items.Add(ccnu);
            }
       }

    También si el cuadro de lista puede ser null, asegúrese de comprobar que primero antes de rellenar el cuadro de lista.

    if(lbxCabinetName != null)
    {
        selectCabinetToAdd();
    }

    EDITAR 2

    Agregar dinámicamente control

    ListBox lbxCabinetName = new ListBox();
    lbxCabinetName.Location = new System.Drawing.Point(10, 55);
    lbxCabinetName.Size = new System.Drawing.Size(130, 95);
    this.Controls.Add(lbxCabinetName);
    • He utilizado este código exacto y me sigue apareciendo el mismo error. Sé que la lista no es null. También se produce la excepción en la primera iteración del bucle.
    • -1. No es una causa posible dado el código.
    • Estoy corriendo la depuración y dice que lbxCabinetName listbox es nulo. ¿Cómo puedo configurarlo para que no sea nulo? Pensé que la adición de un elemento es susposed hacer es no nulo.
    • ¿cómo se va a añadir el listbox? dinámicamente o a través del diseñador
    • He editado mi post. Ahora usted no debe obtener excepción en el bucle de iteración
    • en el comienzo de los detalles proporcionados por el OP no fue muy claro. De todos modos he modificado mi código.
    • Voy a añadir de forma dinámica. He añadido si (s != null && lbxCabinetName != null) y no se puede lanzar una excepción, pero desde el cuadro de lista es siempre null no se carga nada ahora.
    • es evidente que hay algo mal con la forma de agregar dinámicamente el control. Comprobar mi EDICIÓN 2 en el post. BTW: es difícil dar una solución sin ver tu código de seguimiento de pila o en la excepción.
    • Lo siento, voy a agregar que a través del diseñador. También me he metido hasta el cuadro de lista está el problema. Algo está haciendo que éste sea nulo por lo que no se pueden añadir artículos.
    • Acabo de encontrar el problema. El método de llamada en el constructor. Me mudé en el formulario de carga y todo está funcionando correctamente.
    • Me alegro de que encontró el problema

  2. 0

    Son las cadenas de caracteres que acepta valores null así que en algún momento debe de estar haciendo algo similar a:

    cabinetsCurrentNotUsed.Add(null);

    O eso, o como dbaseman dijo que es posible lbxCabinetName es nulo, pero estoy segura de que no es el caso.

    Como un aparte, que no es realmente un problema, pero si estás usando una lista genérica de las cadenas de la ToString() llamada no es necesario. Usted puede hacer esto:

    lbxCabinetName.Items.Add(cabinetsCurrentNotUsed[i]);
    • He ejecutado a través de la depuración y cabinetsCurrentNotUsed se carga con los valores exactos que necesito. Creo que tiene que ver con la forma en la lista se inicializa. No estoy seguro, pero gracias de antemano por la ayuda.

Dejar respuesta

Please enter your comment!
Please enter your name here