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

问题描述:

我的程序编译,对我来说它是有道理的。使用列表框来显示类的项目

我想知道如何让'名字'列表在我的列表框中。

我想使用一个类的数组,所以我可以添加推销员。每次添加人员时都会创建一个新班级。

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

当我执行程序一切看起来像它做什么,它该做的,但是当我按下列表名称按钮,它只是列出了“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) 
    { 

    } 
} 
} 

在这种方法中:

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); 
} 

你不小心使用窗体本身(这自然是 “Form1的”)的Name财产。

此时您需要有一个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过,但我不想通过将其引入混音来混淆你!

+0

ahh好吧,我如何参考我在Form 2中使用的同一个SalesmanClass? – 2013-05-02 08:28:31

+0

谢谢你这么多,我现在要改变它 – 2013-05-02 08:38:52

+0

@BobJones“我如何引用相同的SalesmanClass,我在表单2中使用”:答案:有很多方法,但我可能会添加一个公共方法,称为'SetSalesmen(SalesmanClass []推销员)'这两个表单类,以便创建这两个表单的类可以将列表传递给两个表单类 - 如果你明白我的意思! – 2013-05-02 08:43:09

在你button2_Click,您有:

names = Name; 

是什么名称属于哪一种?我怀疑它属于Form1,这就是它显示“form1”的原因。如果是这样的话,你只需要获得你的SalesmanClass对象并从中获取Name。