2016-07-31 77 views
0

所以我有一段代码给listView添加了一些信息,但它似乎有点“杂乱”。所以,我有2条信息。它增加了一个完美的,但如果它增加了第二个它告诉我,它已经存在那里&显示我的第一个项目名称,所以基本上它试图添加同样的东西2次。C#添加项目到列表视图被线程窃听?

info.Text = Username; 
info.SubItems.Add(Password); 
info.SubItems.Add(Points.ToString()); 
info.SubItems.Add(Level.ToString()); 
listView1.Items.Add(info); 

我也试过“调试”它,通过查看控制台输入用户名,密码等。所有这些都是不同的。

//编辑

我只是做了第二次调试,如果信息被传递给为addItems()无效,那么数据的变化,所以我认为它被以某种方式通过螺纹窃听。

+0

对不起,你在做一个'新的ListViewItem( );'每次? – 2016-07-31 14:38:08

+0

不是每次,我都会在程序开始时调用它。 –

+0

所以你实际上不能再添加它......如果我正确理解正在发生的事情......请分享更多的代码,你试图实现什么 – 2016-07-31 14:39:51

回答

0

道歉,如果这不是你正在寻找的解决方案。由于在你的问题上有些缺乏细节,这是从我可能理解的内容中得到的

是信息自定义类吗?如果是这样,我会假设SubItems也是一个List对象。如果这些场景是正确的,那么你的类应该是这个样子

public class info 
{ 
    public string Text { get; set; } 
    public List<string> SubItems { get; set; } 

    /* Other Code */ 
} 

现在,如果我没有记错的话,好像你正试图将数据序列化为一个字符串,然后添加到ListView?如果是的话有,你可以去这样做的几种方法:

public class info 
{ 
    /* Other Code */ 

    public override string ToString() 
    { 
     return $"Username: {Text}; Password: {SubItems[0]}; Points: {SubItems[1]}; Level: {SubItems[2]};" 
    } 
} 

现在的情况下,这一切都是真的,你现在可以执行:

info PersonInfo = new Info() 
{ 
    Text = Username; 
    SubItems = new List<string>() 
    { 
     Password, 
     Points.ToString(); 
     Level.ToString(); 
    } 
} 

ListView1.Items.Add(ParsonInfo.ToString()); 
+0

嗯,基本上。从服务器接收信息后,它会将信息传递给addItem void,但似乎是因为将信息更改引导至第一个信息。所以如果一个人是彼得,二是詹姆斯并且信息通过了,那么addItem void中的信息是彼得和彼得。 –

+0

要获取信息我正在使用调用,因为它是必需的,但我没有使用调用添加项目,因为看起来好像没有必要。 –

+0

您是否有机会创建信息类的新实例?请记住,如果您将对象设置为静态,那么“只有一个”可能存在。所以通过可能创建一个新的信息实例: info Peter = new Info() info James = new Info() 然后做 ListView1.Items.Add(Peter); ListView1.Items.Add(James); 当然以更强大的方式! –