2010-12-02 3 views
0

merci d'avance pour toute aide! Un peu de fond, je construis une application qui stocke des véhicules (voitures, camions, bus), j'ai une superclasse de véhicule et toutes les classes individuelles (car.cs, truck.cs, minibus.cs) héritent de cette super classe.Ai-je une instruction if manquante?

J'ai également une classe appelée «flotte» que je voudrais ajouter les véhicules à un puis afficher les résultats dans une zone de liste.

J'ai tout le reste de travail mais je ne peux pas obtenir les camions et les minibus pour mettre à jour et afficher sur la liste comme les voitures font.

Voici ma classe de flotte qui comprend le car.cs; et cela fonctionne bien et les données extraites du formulaire de voiture sont ajoutées et affichées dans la liste.

class Fleet 
{ 
    private List<Vehicle> theFleet = new List<Vehicle>(); 

    public List<Vehicle> fleet 
    { 
     get 
     { 
      return theFleet; 
     } 
    } 

    public void deleteFromFleet(Vehicle aCar) 
    { 
     theFleet.Remove(aCar); 
    } 

    public void addToFleet(Vehicle aCar) 
    { 
     theFleet.Add(aCar); 
    } 
} 

Voici ma principale forme, qui a la liste sur elle:

public partial class FrmHireCo : Form 
{ 
    private Fleet myFleet = new Fleet(); 
    private ClientList mycustomer = new ClientList(); 

    //Fleet object used to store cars 

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

    private void updateFleetList() 
    { 
     lstFleet.Items.Clear(); 
     foreach (Car c in myFleet.fleet) 
     { 
      string line = "Car: " + c.make+" " + c.colour; 
      lstFleet.Items.Add(line); 
     } 
    } 

    private void updateClientList() 
    { 
     customers.Items.Clear(); 
     foreach (Customer c in mycustomer.clientlist) 
     { 
      string line = "Customer: " + c.name + " " + c.address; 
      customers.Items.Add(line); 
     } 
    } 

    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) 
    { 
     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 btnCustomer_Click(object sender, EventArgs e) 
    { 
     FrmCustomer customerGui = new FrmCustomer(); 
     customerGui.ShowDialog(); 
     Customer mycustomer = customerGui.customer;   
     mycustomer.addToClientList(mycustomer);  
     updateFleetList(); 
    } 

    private void customers_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     if (customers.SelectedIndex > -1) 
     { 
      int index = customers.SelectedIndex; 
      Customer myCustomer = mycustomer.clientlist.ElementAt(index); 
      FrmCustomer customerGui = new FrmCustomer(); 
      customerGui.customer = myCustomer; 
      customerGui.Show(); 
     } 
    } 
} 

Vive toute aide!

+0

Vous avez dit que le code que vous avez fourni fonctionne. Pouvez-vous fournir le code qui ne fonctionne pas aussi bien? C'est ce que vous voulez de l'aide, n'est-ce pas? –

+0

La seule typecasting que je vois est pour la voiture. Je ne suis pas sûr où vos références aux autobus et aux mini-fourgonnettes sont ... Aussi je recommanderais d'employer une liste plutôt que la liste . De cette façon, vous n'aurez pas besoin de typer le contenu de la liste. Assurez-vous d'indiquer clairement le contrat d'interface afin que toutes les propriétés et fonctions partagées entre les voitures, les bus et les minivans soient indiquées dans l'interface. – code4life

+0

Rien dans le code que vous avez posté ajoute réellement des camions ou des minibus à la liste. Tout ce que vous travaillez avec sont des objets 'Car'. –

Répondre

1
private void updateFleetList() 
    { 
     lstFleet.Items.Clear(); 
     foreach (Vehicle c in myFleet.fleet) 
     { 
      string line = "Car: " + c.make+" " + c.colour; 
      lstFleet.Items.Add(line); 
     } 
    } 
+0

foreach devrait obtenir chaque véhicule (au lieu de voiture) hors de la flotte. –

+0

donc en changeant 'Car' en 'Vehicle' dans la déclaration foreach, cela me permettra d'ajouter des camions, des minibus, des clients à la liste? – bettsy583

+0

Merci pour cela, pour – bettsy583

1

Vous devez inclure tous les véhicules.

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

Aussi, juste passer outre ToString dans toutes vos sous-classes de véhicules et le ListBox utilisera cette nature; De cette façon, tous les Vehicle ont besoin d'une propriété Make ou Color.

+0

Est-ce que je ne manque pas une partie de la méthode pour contrôler la zone de liste? Ai-je manqué une déclaration if-else? – bettsy583

+0

@ryan betts: Qu'entendez-vous par * contrôler la zone de liste *? –

+0

J'ai posté un commentaire à propos de cette aide? – bettsy583