Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#如何将ListView中的选定项与真实对象关联起来?_C#_Winforms_List_Listview - Fatal编程技术网

C#如何将ListView中的选定项与真实对象关联起来?

C#如何将ListView中的选定项与真实对象关联起来?,c#,winforms,list,listview,C#,Winforms,List,Listview,我正在努力从列表视图中的选定项转到它所表示的真实对象。为了让问题保持简单,我有几件事: 自制类的两个对象列表personaje: public List<personaje> nuevosDeudores = new List<personaje>(); public List<personaje> deudores = new List<personaje>(); 如您所见,我找到了一种从一个列表中删除personaje对象的方法,但我不

我正在努力从列表视图中的选定项转到它所表示的真实对象。为了让问题保持简单,我有几件事:

自制类的两个对象列表
personaje

public List<personaje> nuevosDeudores = new List<personaje>(); 

public List<personaje> deudores = new List<personaje>(); 
如您所见,我找到了一种从一个列表中删除
personaje
对象的方法,但我不知道如何将其添加到另一个列表中。我只有糟糕的ListViewItem引用,我不知道如何直接“谈论它”,可以这么说:)

编辑: 我在填充两个列表的地方添加代码

        deudores.Add(new personaje("Dimitri", 1));
        deudores[0].seLeDebe = 5000;
        deudores[0].paciencia = 4;
        deudores.Add(new personaje("Marcelo", 1));  
        deudores[1].seLeDebe = 2500;  
        deudores[1].paciencia = 10;

        nuevosDeudores.Add(new personaje("Pascuale", 1));
        nuevosDeudores[0].oferta = 3000;
        nuevosDeudores[0].paciencia = 10;
        nuevosDeudores.Add(new personaje("Señor Anselmo", 1));
        nuevosDeudores[1].oferta = 6000;
        nuevosDeudores[1].paciencia = 7;
        nuevosDeudores.Add(new personaje("Snatch", 1));
        nuevosDeudores[2].oferta = 2000;
        nuevosDeudores[2].paciencia = 5;
下面是我用来填充ListView的代码

    private void PopularListview()
    {
        listView1.Items.Clear();
        int cuenta = 0;
        ListViewItem[] item = new ListViewItem[20];
        foreach (personaje deudor in jugador.deudores)
        {
            string paciencia = "";
            for (int i = 0; i < deudor.paciencia / 2; i++) paciencia += "|";
            string[] row = { deudor.identificador.ToString(), deudor.nombre, deudor.seLeDebe.ToString(), paciencia };
            item[cuenta] = new ListViewItem(row);
            listView1.Items.Add(item[cuenta]);
            cuenta++;
        }
    }
private void PopularListview()
{
listView1.Items.Clear();
int-cuenta=0;
ListViewItem[]项=新ListViewItem[20];
foreach(jugador.deudores中的Deudore人)
{
字符串paciencia=“”;
对于(int i=0;i
您没有声明任何内容,我假设您使用Windows窗体

每个ListViewItem都有一个可用于此场景的

创建ListViewItems时,将对象放入该标记中。当用户选择ListViewItem时,查看它的标记以获取放置在其中的对象:

jugador.deudores.Add(item.Tag as personaje);
编辑:

插入ListView时,添加一行设置每个项目的标记:

        item[cuenta] = new ListViewItem(row);
        item[cuenta].Tag = deudor;
        listView1.Items.Add(item[cuenta]);

我猜在从一个列表添加到另一个列表时遇到了问题,这是相同类型的。如果是,请尝试以下代码,替换
If
内的第二行

jugador.deudores.AddRange(nuevosDeudores.Where(x => x.identificador == Convert.ToInt32(listView1.SelectedItems[0].SubItems[0].Text)));

获取所选人员id。然后您将能够从列表中获取人员,并以任何方式操作列表:

private void button3_Click(object sender, EventArgs e)
{
    if (listView1.SelectedIndices.Count == 1)
    {
        ListViewItem item = listView1.SelectedItems[0];            
        int id = Convert.ToInt32(item.SubItems[0].Text);
        var personaje = jugador.nuevosDeudores.First(x => x.identificador == id);

        listView1.Items.Remove(item); // remove from ListView
        jugador.nuevosDeudores.Remove(personaje); // remove from List

        jugador.deudores.Add(personaje); // add to another List
        // Create and add ListViewItem to listView2
    }
}

是的,对不起,这是VS2010中的Windows窗体。你能用我提供的代码键入一个代码示例吗?你从来没有提供将项目放入列表的部分,因此,在你发布更多代码之前,这部分是不可能完成的。我认为这与问题无关,希望问题保持简单。我用代码编辑了我的问题now@CarlesAlcolea请看一看。旁注:如果你的代码不使用国家语言,那么互联网上的人或开发人员将更容易帮助你。尝试英语类和变量名。现在,我用stackoverflow写问题的时间占搜索/阅读时间的0.001%,但我会记住英语:)一个问题的三种解决方案,我会全部尝试。非常感谢。
private void button3_Click(object sender, EventArgs e)
{
    if (listView1.SelectedIndices.Count == 1)
    {
        ListViewItem item = listView1.SelectedItems[0];            
        int id = Convert.ToInt32(item.SubItems[0].Text);
        var personaje = jugador.nuevosDeudores.First(x => x.identificador == id);

        listView1.Items.Remove(item); // remove from ListView
        jugador.nuevosDeudores.Remove(personaje); // remove from List

        jugador.deudores.Add(personaje); // add to another List
        // Create and add ListViewItem to listView2
    }
}