列表框显示的是类名而不是值

时间:2015-04-03 20:28:00

标签: c# visual-studio-2013

我正在开发一个用户可以创建不同动物的项目。 这是继承的工作方式:

  

Animal class是所有类的父级。

     

哺乳动物类继承自Animal类。

     

Dog class继承自Mammal类。

     

Cat类继承自Mammal类

     

Reptile类继承自Animal类

     

Snake类继承自Reptile类

     

Lizard类继承自Reptile类

用户可以选择要创建的动物。有一个列表框显示动物的类型(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是一个字符串元素的集合,其中每个元素都是一行文本,描述了一部分进食计划。

有关计划的信息将被包含并填入FoodSchedule的实例中,例如Dog类(通过重写方法进行硬编码)

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";

1 个答案:

答案 0 :(得分:0)

根据您的问题,我想知道您想要显示所选动物的食物描述(字符串列表),即狗

要在FoodSchedule类中实现此功能,请添加属性

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

在您的主表单中,您可以将此集合绑定到列表框

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