2010-04-25 3 views
0
using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

using System.IO; 
using System.Runtime.Serialization.Formatters.Binary; 

namespace FoolballLeague 
{ 
    public partial class MainMenu : Form 
    { 
     FootballLeagueDatabase footballLeagueDatabase; 
     Game game; 
     Login login; 

     public MainMenu() 
     { 
      InitializeComponent(); 
      changePanel(1); 
     } 

     public MainMenu(FootballLeagueDatabase footballLeagueDatabaseIn) 
     { 
      InitializeComponent(); 
      footballLeagueDatabase = footballLeagueDatabaseIn; 
     } 

     private void Form_Loaded(object sender, EventArgs e) 
     { 
     } 



     private void gameButton_Click(object sender, EventArgs e) 
     { 
      int option = 0; 
      changePanel(option); 
     } 
     private void scoreboardButton_Click(object sender, EventArgs e) 
     { 
      int option = 1; 
      changePanel(option); 
     } 
     private void changePanel(int optionIn) 
     { 
      gamePanel.Hide(); 
      scoreboardPanel.Hide(); 

      string title = "Football League System"; 

      switch (optionIn) 
      { 
       case 0: 
        gamePanel.Show(); 
        this.Text = title + " - Game Menu"; 
        break; 
       case 1: 
        scoreboardPanel.Show(); 
        this.Text = title + " - Display Menu"; 
        break; 
      } 
     } 

     private void logoutButton_Click(object sender, EventArgs e) 
     { 
      login = new Login(); 
      login.Show(); 
      this.Hide(); 
     } 

     private void addGameButton_Click(object sender, EventArgs e) 
     { 
      if ((homeTeamTxt.Text.Length) == 0) 
       MessageBox.Show("You must enter a Home Team"); 
      else if (homeScoreUpDown.Value > 9 || homeScoreUpDown.Minimum < 0) 
       MessageBox.Show("You must enter one digit between 0 and 9"); 
      else if ((awayTeamTxt.Text.Length) == 0) 
       MessageBox.Show("You must enter a Away Team"); 
      else if (homeScoreUpDown.Value > 9 || homeScoreUpDown.Value < 0) 
       MessageBox.Show("You must enter one digit between 0 to 9"); 
      else 
      { 
       //checkGameInputFields(); 
       game = new Game(homeTeamTxt.Text, int.Parse(homeScoreUpDown.Value.ToString()), awayTeamTxt.Text, int.Parse(awayScoreUpDown.Value.ToString())); 
       MessageBox.Show("Home Team -" + '\t' + homeTeamTxt.Text + '\t' + "and" + '\r' + "Away Team -" + '\t' + awayTeamTxt.Text + '\t' + "created"); 
       footballLeagueDatabase.AddGame(game); 

       //clearCreateStudentInputFields(); 
      } 
     } 
     private void timer1_Tick(object sender, EventArgs e) 
     { 
      displayDateAndTime(); 
     } 

     private void displayDateAndTime() 
     { 
      dateLabel.Text = DateTime.Today.ToLongDateString(); 
      timeLabel.Text = DateTime.Now.ToShortTimeString(); 
     } 

     private void displayResultsButton_Click(object sender, EventArgs e) 
     { 
      Game game = new Game(homeTeamTxt.Text, int.Parse(homeScoreUpDown.Value.ToString()), awayTeamTxt.Text, int.Parse(awayScoreUpDown.Value.ToString())); 

      gameResultsListView.Items.Clear(); 
      gameResultsListView.View = View.Details; 

      ListViewItem row = new ListViewItem(); 
      row.SubItems.Add(game.HomeTeam.ToString()); 
      row.SubItems.Add(game.HomeScore.ToString()); 
      row.SubItems.Add(game.AwayTeam.ToString()); 
      row.SubItems.Add(game.AwayScore.ToString()); 

      gameResultsListView.Items.Add(row); 
     } 

     private void displayGamesButton_Click(object sender, EventArgs e) 
     { 
      Game game = new Game("Home", 2, "Away", 4);//homeTeamTxt.Text, int.Parse(homeScoreUpDown.Value.ToString()), awayTeamTxt.Text, int.Parse(awayScoreUpDown.Value.ToString())); 

      modifyGamesListView.Items.Clear(); 
      modifyGamesListView.View = View.Details; 

      ListViewItem row = new ListViewItem(); 
      row.SubItems.Add(game.HomeTeam.ToString()); 
      row.SubItems.Add(game.HomeScore.ToString()); 
      row.SubItems.Add(game.AwayTeam.ToString()); 
      row.SubItems.Add(game.AwayScore.ToString()); 

      modifyGamesListView.Items.Add(row); 
     } 

     } 
    } 

Ceci est le code entier et j'ai eu la même erreur comme question précédente.Erreur d'exception dans C#

Exception non gérée est produite en vous application.If vous cliquez sur Application ............... Quit.the fermera immédiatement. La référence d'objet n'est pas définie sur une instance d'un objet.

Et les détails suivants figurent dans le message d'erreur.

************** Exception texte ************** System.NullReferenceException: objet référence non définie à une instance d'un objet. à FoolballLeague.MainMenu.addGameButton_Click (Object expéditeur, EventArgs e) dans C: \ Users \ Achini \ Desktop \ FootballLeague \ FootballLeague \ MainMenu.cs: ligne 91 à System.Windows.Forms.Control.OnClick (EventArgs e) à System.Windows.Forms.Button.OnMouseUp (MouseEventArgs mevent) à System.Windows.Forms.Control.WmMouseUp (message & m, bouton MouseButtons, Int32 clique) à System.Windows.Forms .Control.WndProc (message & m) à System.Windows.Forms.ButtonBase.WndProc (message & m) à System.Windows.Forms.Button.WndProc (message & m) à System.Windows.Forms.Control.ControlNativeWindow.WndProc (message & m) à System.Windows.Forms.NativeWindow. callback (IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Je dois ajouter les jeux à l'aide de la addGameButton et la sauvegarde de ces jeux ajoutés et les afficher dans la vue de la liste (gameResultsListView). Maintenant, je peux ajouter un jeu et afficher dans la vue liste. Mais quand j'ai appuyé sur le bouton addGameButton j'ai eu le message d'erreur ci-dessus.

Si vous le pouvez s'il vous plaît donnez-moi une solution à ce problème.

+0

Vous pouvez réduire les choses un peu pour obtenir une bonne réponse. Tout le contenu de l'exception n'est pas nécessaire (juste le type et la trace de la pile), et vous pouvez également supprimer des parties du code qui ne sont pas pertinentes à votre question. – Andy

+2

@Andy: Le fait de publier du code non pertinent est une perte de temps et rend la lecture difficile, à en juger par la question que je suppose que l'auteur ne sait pas ce qui est pertinent ou pas à publier. Mieux vaut poster trop que trop peu. Dans ce cas, l'affichage du fichier complet m'a permis de savoir exactement quelle ligne jette l'erreur - quelque chose que l'affiche n'a peut-être pas su faire elle-même. Bien sûr, ils devraient apprendre à faire cela eux-mêmes. –

+0

Est-ce le seul formulaire de votre projet? Existe-t-il du code pour initialiser et afficher ce code ou l'avez-vous défini comme le formulaire de démarrage? S'il s'agit du formulaire de démarrage, il est fort probable que le constructeur qui envoie la base de données footballLeagueDatabase ne soit pas appelé, à la place de celui qui n'a pas de paramètres. La façon la plus simple de tester est de définir des points d'arrêt; sinon vous pouvez faire la méthode sale de mettre des boîtes de messages dans chaque constructeur pour voir ce qui est appelé. Si le constructeur sans paramètre est appelé alors vous avez trouvé votre problème. Sinon, regardez le code qui crée le formulaire MainMenu. –

Répondre

3

L'une des références auxquelles vous essayez d'accéder est null. Il est sur la ligne 91 dans votre fichier MainMenu.cs. Définissez un point d'arrêt et regardez avec le débogueur, qu'est-ce que null?

Je suppose que footballLeagueDatabase est null, vous devez lui assigner une instance de type FootballLeagueDatabase.

2

Êtes-vous sûr que footballLeagueDatabase est initialisé? Je pense que le constructeur où vous l'initialisez n'est jamais appelé.

4

Vous devez apprendre à lire les messages d'erreur et les traces de pile.

Regardez ce bit:

System.NullReferenceException: Object reference not set to an instance of an object. at FoolballLeague.MainMenu.addGameButton_Click(Object sender, EventArgs e) in C:\Users\achini\Desktop\FootballLeague\FootballLeague\MainMenu.cs:line 91

qui vous indique quelle ligne l'erreur est à. Il vous dit également que c'est un NullReferenceException, ce qui signifie que quelque chose est null qui ne devrait pas l'être.

Définissez un point d'arrêt, parcourez le code relatif, examinez ce qui arrive aux variables et déterminez comment il se termine avec cette valeur nulle.

6

Depuis le message d'exception que je peux voir que vous avez un NullReferenceException dans addGameButton_Click à la ligne 91. Cette ligne est 91:

footballLeagueDatabase.AddGame(game); 

donc footballLeagueDatabase est nulle. Voyons voir le code où vous lui assignez:

public MainMenu() 
{ 
    InitializeComponent(); 
    changePanel(1); 
} 

public MainMenu(FootballLeagueDatabase footballLeagueDatabaseIn) 
{ 
    InitializeComponent(); 
    footballLeagueDatabase = footballLeagueDatabaseIn; 
} 

Je suppose que ce soit que vous avez appelé le mauvais constructeur, ou vous avez passé un objet nul dans le constructeur.

Ce code est tout

Non, ce n'est pas tout le code. Vous devriez avoir d'autres fichiers dans votre projet. L'erreur est très probablement dans l'un de ces fichiers (celui qui construit ce formulaire).

2

Il ne ressemble pas à vous Initialise le footballLeagueDatabase partout