使用列表框显示类中的项目

时间:2013-05-02 08:22:12

标签: c# winforms

我的程序编译,对我而言是有意义的。

我想知道如何获得' name'列在我的列表框中。

我尝试使用一组类,以便添加推销员。每次添加一个人时都会创建一个新类。

这样,名称就是调用该类中所有数据的一种方式。

当我执行该程序时,所有内容看起来都像它正在做的事情,但它只是列出了' form1'在列表框中按下列表名称按钮

这就是我的意思:

我哪里错了?

SalesmanClass

namespace WindowsFormsApplication1
{
class SalesmanClass
{

    private string name;
    public string cNum;
    public string Email;
    public string address;
    public string gArea;
    public int tSales;

    public string Name
    {
        get
        {
            return name;
        }
        set
        {
            name = value;
        }
    }

表单1

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
    Form2 w2;



    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {

        if (w2 == null)
        {
            w2 = new Form2();
            w2.Show();
        }

    }

    private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {

    }

    private void button2_Click(object sender, EventArgs e)
    {
        Object names;
        names = Name;
        listBox1.Items.Add(Name);
    }
}

}

表格2

//form2
namespace WindowsFormsApplication1

public partial class Form2 : Form
{


    SalesmanClass[] salesman = new SalesmanClass[] { };
    public Form2()
    {
        InitializeComponent();
    }

    private void Form2_Load(object sender, EventArgs e)
    {

    }

    private void button1_Click(object sender, EventArgs e)
    {

        if (textBox1.Text.Trim().Length != 0)
        {


            for (int i = 0; i > salesman.Length; i++)
            {

                if (salesman[i] == null)
                {
                    salesman[i].Name = textBox1.Text;
                    break;
                }
            }
            this.Close();
        }
        else
        {
            MessageBox.Show("Please Input a Name");
        }

    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {

    }
}
}

2 个答案:

答案 0 :(得分:1)

在这种方法中:

private void button2_Click(object sender, EventArgs e)
{
    Object names;
    names = Name; // <--- Using this.Name, i.e. Form.Name, NOT SalesmanClass.Name
    listBox1.Items.Add(Name);
}

您不小心使用了表单本身的Name属性(当然是“form1”)。

此时您需要拥有SalesmanClass个对象,并使用Name属性

您目前没有Form1中的推销员列表,因此您需要添加一个并使用它。

此外,如果您有SalesmanClass个对象的列表或数组,则应该从它们创建List<string>并使用它来初始化列表框,例如:

SalesmanClass[] salesmen = new SalesmanClass[] {};

// ...

List<string> names = new List<string>();

foreach (var salesman in salesmen)
    names.Add(salesman.Name);

listBox1.Items.AddRange(names);

你也可以使用Linq来做到这一点,但是我不想通过将它引入混音中来迷惑你!

答案 1 :(得分:1)

在你的button2_Click中,你有:

names = Name;

这个名字属于什么?我怀疑它属于Form1,这就是为什么它一直在显示“form1”。如果是这种情况,您只需要获取SalesmanClass对象并从中获取名称。