2015-04-03 59 views
0

我正在處理用戶可以創建不同動物的項目。 繼承工作原理如下:列表框顯示類名稱而不是值

動物類是所有類的父類。

哺乳類繼承動物類。

狗類繼承自哺乳動物類。從哺乳動物類

Cat類繼承

爬蟲類繼承從動物類

從爬蟲類

蛇類繼承

從爬蟲類的蜥蜴類繼承

用戶能夠選擇要創建的動物。有一個列表框顯示了動物的類型(MammalReptile),旁邊有一個列表框,根據用戶選擇的動物類型,它顯示它的動物。

例如,如果用戶在列表框中選擇Mammal,則旁邊的列表框顯示DogCat

用戶然後可以選擇動物來創建,然後輸入關於該動物的一些信息並創建它以使其顯示在結果列表框上。

我還希望它在結果列表框中選擇動物時顯示食物時間表。 例如,如果用戶在結果列表框中選擇一隻狗(在創建後),狗的食物時間表將顯示在時間表列表框中。

問題是,當我試圖在列表框中選擇一個項目,在附表中加入列表框的唯一事情就是類名FoodSchedule

Assign.FoodSchedule

這裏有我的課程:

有一個FoodSchedule類作爲班級經理。

public class FoodSchedule 
    { 
     private List<string> foodDescriptionList; 

     public FoodSchedule() 
     { 
      foodDescriptionList = new List<string>(); 
     } 
     public int Count 
     { 
      get 
      { 
       if ((foodDescriptionList != null)) 
       { 
        return foodDescriptionList.Count; 
       } 
       else 
       { 
        return 0; 
       } 
      } 
     } 

     public void AddScheduleItem(string item) 
     { 

      foodDescriptionList.Add(item); 
     } 


     public string GetFoodSchedule(int index) 
     { 
      if(ValidateIndex(index)) 
      { 
       return foodDescriptionList[index]; 
      } 
      else 
      { 
       return null; 
      } 
     } 

     public bool ValidateIndex(int index) 
     { 
      return ((index >= 0) && (index < foodDescriptionList.Count)); 
     } 

    } 
} 

實例變量foodDescriptionList是字符串元素,其中每個元素是描述餵養時間表的一部分文本的行的集合。

關於日程的信息是被包含並填充在例如Dog類(硬編碼,通過重寫的方法)的的FoodSchedule實例

class Dog : Mammal 
    { 
     private FoodSchedule foodScedule = new FoodSchedule(); 


public override FoodSchedule FoodDescription 
     { 
      get 
      { 
       return this.foodScedule; 
      } 
     } 
public override string GetSpecies() 
     { 
      return "Dog"; 
     } 

    public override FoodSchedule GetFoodSchedule() 
     { 

      foodScedule.AddScheduleItem("Some text"); 


      return foodScedule; 
     } 

mainForm

public partial class MainForm : Form 
    { 
     private FoodSchedule m_foodManager = new FoodSchedule(); 
     private Dog m_dog = new Dog(); 
    FoodSchedule animal = m_dog.GetFoodSchedule(); 

        if (animal != null) 
      { 
        //Adds to the list. 
       foodlst.Items.Add(animal.ToString()); //foodlst is the schedule listbox 
       }  
       foodlst.DisplayMember = "FoodDescription"; 
+0

這是因爲你在呼喚加animal.ToString();如果你沒有在類上重載ToString,它只是返回類的名字。你需要做一些像foodlst.Items.Add(animal.GetSpecies()); – 2015-04-03 20:34:48

+0

您需要爲每個類添加ToString方法! – TaW 2015-04-03 20:43:16

回答

0

從你的問題中,我收集到你想顯示的食物說明(字符串列表)爲選定的動物,即狗

要在FoodSchedule類實現這個附加屬性

public List<string> FoodDescriptionList 
{ 
    get 
    { 
      return foodDescriptionList; 
     } 
} 

而在你的主要形式,你可以在此集合綁定到你的列表框

if (animal != null) 
{ 
    //Adds to the list. 
    foodlst.DataSource = animal.FoodDescriptionList; 
} 
+0

非常感謝! – 2015-04-03 23:43:58

相關問題