加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – Listbox显示的是类名而不是值

发布时间:2020-12-15 23:23:26 所属栏目:百科 来源:网络整理
导读:我正在开发一个用户应该向动物输入值的项目(姓名,年龄,性别等),用户输入的值应显示在列表框中 这些类相互继承.以下是继承的工作原理: Animal class is the parent for all classes. Mammal class inherit from Animal class. Dog class inherit from Mammal
我正在开发一个用户应该向动物输入值的项目(姓名,年龄,性别等),用户输入的值应显示在列表框中
这些类相互继承.以下是继承的工作原理:

Animal class is the parent for all classes.

Mammal class inherit from Animal class.

Dog class inherit from Mammal class.

Cat class inherit from Mammal class

Reptile class inherit from Animal class

Snake class inherit from Reptile class

Lizard class inherit from Reptile class

用户可以选择要创建的动物.有一个列表框显示动物的类型(哺乳动物和爬行动物),旁边有一个列表框,根据用户选择的动物类型,它会显示动物.

例如,如果用户在列表框中选择“哺乳动物”,则其旁边的列表框将显示“狗”和“猫”.

这是完美的工作,这不是问题.

问题是,当用户在列表框中选择动物类型(例如Mammal,Dog)后输入动物值(名称和年龄)并单击添加按钮时,结果列表框会在尝试添加哺乳动物时显示Assign1_1.Mammal动物和Assign_1.Reptile在尝试添加爬行动物时.

我想要它做的是在结果列表框中显示用户输入的值(名称和年龄),而只是根据所选动物显示Assign1.Mammal或Assign1.Reptile.

这是我的MainForm代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Assign_1
{
    public partial class MainForm : Form
    {
        private Dog m_dog = new Dog();
        private Cat m_cat = new Cat();
        private Snake m_snake = new Snake();
        private Lizard m_lizard = new Lizard();
        private AnimalManager animalmgr  = null;
        private Animal m_animal = new Animal();
        public MainForm()
        {

            //Visual Studio initializations
            InitializeComponent();

            //My initializations
            InitializeGUI();
            Gendercmb.DataSource = Enum.GetValues(typeof(GenderType));
            Categorylst.DataSource = Enum.GetValues(typeof(Categorytype));
            animalmgr = new AnimalManager();

        }

        private void InitializeGUI()
        {
            ReadInput();
        }

        private void ReadInput()
        {
            m_animal.Name = ReadName();
            m_animal.Age = ReadAge();
        }
        private int ReadAge()
        {
            int age = 0;

            int.TryParse(Agetxt.Text,out age);

            return age;
        }

        private string ReadName()
        {
            string name = "";
            name = Nametxt.Text;
            return name;
        }

        private void addMammal(Mammal values)
        {

            ReadInput();

            switch ((MammalType)Animallst.SelectedIndex)
            {
                 case MammalType.Dog:
                    {

                        // Use a copy constructor to set a dog with common data
                        Dog m_dog = new Dog(values);
                        // If more data in GUI to fill in for this animal,do it here
                        //Then send it to the manager for adding to the list
                        animalmgr.add(m_dog);
                        break;
                   } 
                case MammalType.Cat:
                    {
                        Cat m_cat = new Cat();
                        animalmgr.add(m_cat);
                        break;
                    }
            }
        }

        private void AddReptile(Reptile values)
        {
            ReadInput();

            switch ((ReptileType)Animallst.SelectedIndex)
            {
                case ReptileType.Snake:
                    {

                        // Use a copy constructor to set a snake with common data
                        Snake m_snake = new Snake(values);
                        // If more data in GUI to fill in for this animal,do it here
                        //Then send it to the manager for adding to the list
                        animalmgr.add(m_snake);
                        break;
                    }
                case ReptileType.Lizard:
                    {
                        Lizard m_lizard = new Lizard();
                        animalmgr.add(m_lizard);
                        break;
                    }
            }
        }

        //When user clicks "Add to list"
        private void button1_Click(object sender,EventArgs e)
        {
            ReadInput();

            switch ((Categorytype)Categorylst.SelectedIndex)
            {
                case Categorytype.Mammal:
                    {
                        Mammal mammal = new Mammal(m_animal);
                        addMammal(mammal);
                        break;
                    }
                case Categorytype.Reptile:
                    {
                        Reptile m_reptile = new Reptile(m_animal);
                        AddReptile(m_reptile);
                        break;
                    }


            }
            UpdateResults();
        }
        private void UpdateResults()
        {

            Resultlst.Items.Clear();  //Erase current list
            //Get one elemnet at a time from manager,and call its 
            //ToString method for info - send to listbox
            for (int index = 0; index < animalmgr.ElementCount; index++)
            {
                Animal animal = animalmgr.GetElementAtPosition(index);

                Resultlst.Items.Add(animal.ToString());
            }
        }

这是我的Animal经理课程:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Assign_1
{
    class AnimalManager
    {
        private List<Animal> m_animal;
        private List<Mammal> m_mammal;
        public AnimalManager()
        {
            //In this list objects off diff animals of all species are saved
            m_animal = new List<Animal>();
            m_mammal = new List<Mammal>();
        }


        public void add(Animal ObjIn)
        {
            m_animal.Add(ObjIn);
        }

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

        public Animal GetElementAtPosition(int index)
        {
            //We choose to return a copy,why do I need type casting when copying?
        if (IsIndexValid(index))
            {
                if (m_animal[index] is Mammal)
                    return new Mammal((Mammal)m_animal[index]);
                if (m_animal[index] is Reptile)
                    return new Reptile((Reptile)m_animal[index]);
                return null;
            }
            else
                return null;
        }

        public int ElementCount
        {
            get { return m_animal.Count; }
        }


    }
}

这是我的哺乳动物课:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Assign_1
{
    class Mammal : Animal
    {
        private MammalType theMammal;
        private int teeth;


        public Mammal() : base()
             {

             }
        public Mammal(Animal other)
        {
            this.Name = other.Name;
            this.Age = other.Age;
            this.Gender = other.Gender;
            this.Id = other.Id;

        }

        public Mammal (MammalType type)
        {
            theMammal = type; 
        }

#region Props
        public MammalType TheMammal
        {
            get { return theMammal; }
            set { theMammal = value; }
        }


        public int Teeth
        {
            get { return teeth; }
            set { teeth = value; }
         }
#endregion


    }
}

这是我的Dog课程:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Assign_1
{
    class Dog : Mammal
    {


        public Dog()
        {

        }
      public Dog(Mammal other)
    {
      this.Name = other.Name;
      this.Age = other.Age;
      this.Teeth = other.Teeth;
    }


    }
}

编辑
为了做到这一点,我只展示了儿童类哺乳动物和狗.如果我能弄清楚如何创建一只狗,我也可以修复其他狗.

解决方法

您只需要在类中添加ToString()方法的覆盖.
覆盖返回您选择在ListBoxes中显示的值.

ListBox在准备好显示项目时,使用添加到其items集合的类实例的ToString方法.如果没有ToString(),则使用基类Object.ToString(),该方法只返回类名

例如,您可以使用更改Dog类

class Dog : Mammal
{
    public Dog()
    {
    }
    public Dog(Mammal other)
    {
       this.Name = other.Name;
       this.Age = other.Age;
       this.Teeth = other.Teeth;
    } 
    public override string ToString()
    {
       return string.Format("{0},{1},{2}",this.Name,this.Age,this.Teeth);
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读