NullReferenceException era no controlada, de objetos de referencia no establecida como una instancia de un objeto

StackOverflow https://stackoverflow.com/questions/866070

Pregunta

Siempre que tengo mi programa, me sale:. NullReferenceException fue controlada, objeto de referencia no establecida como instancia de un objeto

Cuando inicio el programa, tengo una forma llamada aparecen maxscore donde el usuario introduce la puntuación máxima y presiona OK. En el caso de OK, yo llamo un método de MainForm para actualizar el maxGameCountLabel en MainForm con el valor introducido para la puntuación máxima, como un parámetro.

Cuando pulse OK, tengo la NullReferenceException a

myGameCountLbl.Text = maxGames.ToString();

de mi método maxGameCountLblUpdate.

Este es el código del método maxGameCountLblUpdate que reside en MainForm:

//Update game count label 
public void maxGameCountLblUpdate(decimal maxGames)
{
    maxGames = decimal.ToInt32(maxGames);
    myGameCountLbl.Text = maxGames.ToString();
    compGameCountLbl.Text = maxGames.ToString();
}

Esta es mi evento del botón OK en maxscore:

private void okBtn_Click(object sender, EventArgs e)
{
    MainForm.maxGameCountLblUpdate(max);
}

Nota, he puesto

public Form1 MainForm { get; set; }

en maxscore

Y creo maxscore en MainForm con:

    using (MaxScore scoreForm = new MaxScore())
    {
        scoreForm.MainForm = this;
        scoreForm.ShowDialog();
    }

No puedo conseguir que esto funcione .. He intentado muchas cosas .. Gracias!

EDIT: Después de la adición de un punto de interrupción en myGameCountLbl.Text = maxGames.ToString (); myGameCountLbl parece estar subiendo como nulo ... Lo siento por ser un newb ... ¿Cómo puedo solucionar esto? maxgames, de hecho, viene como 1, por lo que no es el problema

¿Fue útil?

Solución

¿Ha quitado: InitializeComponent(); desde el constructor

?

Si está utilizando el diseñador para construir la forma de interfaz de usuario, Visual Studio construye un método en el fondo (Class.designer.cs) para inicializar los controles. Si usted no llama InitializeComponent() antes de acceder a los elementos de interfaz de usuario, obtendrá una NullReferenceException.

Otros consejos

Bueno, si esta es la línea que está causando el problema:

myGameCountLbl.Text = maxGames.ToString();

entonces o bien myGameCountLbl es nulo, o maxGames es. Dado que <=> es un decimal, que sugiere que <=> es nulo.

¿Qué pasa cuando se depura en esto y poner un punto de interrupción en la línea apropiada? ¿Qué hace ese programa para <=>?

También puede tener descanso Visual Studio en todas las excepciones, o romper en todos NullReferenceExceptions, y luego se puede inspeccionar lo que está pasando.

(Depurar -> Excepciones -> Excepciones Common Language Runtime ...)

¿Por qué no poner un punto de interrupción en esa línea y depurar el estado actual de los dos objetos? ¿Dónde está máx viniendo aquí?

MainForm.maxGameCountLblUpdate (max);

Sé que esto fue publicada hace mucho tiempo, pero me encontré con el mismo problema y así es como lo resolví.

Si nos fijamos en las sugerencias para solucionar problemas previstos, el segundo sugiere:

  

comprobación para determinar si el objeto es nulo antes de llamar al método.

Eso es en realidad la solución. El uso de una instrucción IF para comprobar si el valor que se asigna no es nulo como:

if (maxGames!=null){
      myGameCountLbl.Text = maxGames.ToString();
}

Eso evitará así la asignación de valor nulo a myGameCounLbl

Espero que ayude

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top