2010-12-02 33 views
1

Je construis une application pour stocker des véhicules, j'ai une forme principale avec des boutons pour charger des formulaires individuels pour chaque type de véhicule (voiture, camion, bus) ils héritent tous de leurs propriétés principales de la classe de véhicule. J'ai aussi une classe «flotte» pour que tous les véhicules puissent être ajoutés à la flotte. J'ai réussi à obtenir la première voiture de travail, mais je suis aux prises avec la deuxième (camion), je peux cliquer sur le bouton que le formulaire de camion charge et je peux entrer des données dans les boîtes de txt mais quand je clique sur le Bouton 'Fermer' sur le formulaire rien ne se passe! Et quand je ferme l'application, je reçois un «NonImplementedExecption n'a pas été manipulé»NotImplementedExecption n'a pas été manipulé! COINCÉ!

Des idées, qu'est-ce que je manque? Des cris de joie à l'avance ....

public partial class FrmHireCo : Form 
    /* 
    * This is the main form for the car hire system. 
    * It allows the adding to new cars to the system, and displaying them in the fleet list 
    * 
    */ 
{ 
    private Fleet myFleet = new Fleet(); 
    //Fleet object used to store cars 

    public FrmHireCo() 
    { 
     //Default constructor 
     InitializeComponent(); 
    } 


    private void updateFleetList() 
    { 
     lstFleet.Items.Clear(); 
     foreach (Vehicle v in myFleet.fleet) 
     { 
      lstFleet.Items.Add(v); 
     } 
    } 

    private void btnAddCar_Click(object sender, EventArgs e) 
    { 
     //Add a new car 
     FrmCar carGui = new FrmCar(); //Form used to add new car 
     carGui.ShowDialog(); 
     Car myCar = carGui.car;   //Get new car from form 
     myFleet.addToFleet(myCar);  //Add to fleet list 
     updateFleetList();    //Uodate fleet list 
    } 

    private void lstFleet_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     /* 
     * This method is used to control the list box 
     * It is called when a row is selected by the user, it then displays frmCar 
     * with the car details 
     */ 
     if (lstFleet.SelectedIndex > -1) 
     { 
      int index = lstFleet.SelectedIndex; 
      Car myCar = myFleet.fleet.ElementAt(index); 
      FrmCar carGui = new FrmCar(); 
      carGui.car = myCar; 
      carGui.Show(); 
     } 
    } 

    private void FrmHireCo_Load(object sender, EventArgs e) 
    { 

    } 

    private void btnAddTruck_Click(object sender, EventArgs e) 
    { 
     FrmTruck truckGui = new FrmTruck(); //Form used to add new car 
     truckGui.ShowDialog(); 
     Truck myTruck = truckGui.truck;   //Get new car from form 
     myFleet.addToFleet(myTruck);  //Add to fleet list 
     updateFleetList();    //Uodate fleet list 
    } 

} 

}}

C'est ma principale forme avec les boutons pour charger la forme de camion etc, voici ma classe de la flotte. Je pense qu'il me manque quelque chose de vraiment idiot!

class Fleet 
{ 
    /* 
    * This class is used to hold a list of Car objects that make up the fleet: 
    * The car objects may be added through the addToFleet() method. 
    * The car objects may be deleted tgrough the deleteFromFleet() method 
    * Use the fleet property to access the list of car objects 
    */ 

    private List<Vehicle> theFleet = new List<Vehicle>(); //The list of car objects being stored 

    public List<Vehicle> fleet 
     /* The fleet property. Note that you can only read it 
     * use the addToFleet and deleteFromFleet to update it 
     */ 
    { 
     get 
     { 
      return theFleet; 
     } 
    } 

    public void deleteFromFleet(Vehicle aVehicle) 
     //Delete car from fleet 
    { 
     theFleet.Remove(aVehicle); 
    } 

    public void addToFleet(Vehicle aVehicle) 
     //Add car to fleet 
    { 
     theFleet.Add(aVehicle); 
    } 

    internal void addToFleet(Truck myTruck) 
    { 
     throw new NotImplementedException(); 
    } 
} 

}

Ceci est la partie du code en mode débogage qui affiche la « NotImplementedException était non gérée.

internal void addToFleet(Truck myTruck) 
    { 
     throw new NotImplementedException(); 
    } 
} 

}

+0

Alors allez donner à cette fonction une implémentation correcte? –

+0

Marqué cela comme devoirs, car il est ouvertement. – tomfanning

+0

est-ce interdit? – bettsy583

Répondre

0
internal void addToFleet(Truck myTruck) 
{ 
    throw new NotImplementedException(); 
} 

Apparemment, vous avez passé sous silence droite sur la partie de votre code où la fonction est mise en œuvre. Remplacez simplement "throw new NotImplementedException" par votre code.

+0

Je l'ai remplacé par 'theFleet.Add (aVehicle); maintenant je reçois 'le nom' un véhicule 'n'existe pas dans le contexte actuel – bettsy583

+0

qu'est-ce que "aVehicle"? L'avez-vous créé? – Mattygabe

+0

le remplacer par 'theFleet.Add (myTruck);' –

1

Vous seriez mieux loti juste en utilisant le code comme ceci:

myFleet.fleet.Add(myTruck); 

que d'utiliser vos propres fonctions ajout/suppression personnalisée qui appellent simplement les fonctions de toute façon. Vous ne les avez pas cachés si c'était votre intention. Pour ce qui est de savoir pourquoi vous avez ce problème ... vous devriez rechercher la résolution de surcharge et vous rappeler que l'interne signifie que n'importe quoi dans le même assemblage peut y accéder, aussi longtemps que ces deux classes sont dans le même assemblage exact, vous continuera à avoir ce problème.

+0

Alors, où ajouterais-je cela? – bettsy583

+0

dans chacun de vos gestionnaires de clic de bouton remplaçant le code où vous appelez actuellement vos propres fonctions d'ajout/suppression. –

+0

La même erreur apparaît maintenant mais c'est derrière mon bouton 'btnAddTruck' qui est sur le formulaire principal. FrmTruck truckGui = nouveau FrmTruck(); // Formulaire utilisé pour ajouter une nouvelle voiture truckGui.ShowDialog(); Camion myTruck = truckGui.truck; myFleet.addToFleet (myTruck); << CETTE LIGNE A L'ERREUR updateFleetList(); – bettsy583

1

Lorsque vous ajoutez un camion à votre flotte, vous appelez réellement internal void addToFleet(Truck myTruck) pas public void addToFleet(Vehicle aVehicle) parce que le compilateur appelle la méthode qui correspond au type que vous passez dans.

Ditch la méthode internal.

+0

Est-ce que tout le reste a l'air correct dans le code pour qu'il fasse ce que je veux? Je l'ai regardé pendant si longtemps que je peux y penser logiquement, et je suis assez nouveau pour la programmation! – bettsy583

+1

Vous doublez le travail nécessaire lorsque les fonctions d'ajout/suppression sont déjà exposées sur la propriété 'Fleet'. –

+0

Je suis partiellement d'accord avec Nick, cela dépend de ce que vous voulez que votre conteneur flotte. Si ça fonctionne comme un seau de véhicules et rien de plus, comme l'a dit Nick, il suffit d'utiliser une liste directement. Si vous voulez une classe qui a plus d'intelligence, gardez votre classe de flotte et ajoutez des connaissances spécifiques à votre flotte. –

1

Apparemment, à un certain moment, Visual Studio vous a invité à "Générer le talon de méthode pour 'addToFleet' dans 'Flotte'", et vous avez répondu oui. Lorsque Visual Studio génère une méthode pour vous, il met throw new NotImplementedException(); à l'intérieur pour vous rappeler que vous devez revenir en arrière et implémenter la méthode. Donc, normalement, vous supprimez simplement la ligne qui lève l'exception et la remplace par le code qui appartient à la méthode.

Cependant, dans votre cas, je ne pense pas que vous ayez besoin de cette méthode. Je suppose que le camion hérite du véhicule; Si c'est le cas, la surcharge de addToFleet qui prend un véhicule fonctionnera également pour les camions. Donc, vous pouvez simplement supprimer la méthode internal void addToFleet(Truck myTruck) entière.