NullReferenceException era no controlada, de objetos de referencia no establecida como una instancia de un objeto
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
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