Kopiowanie elementów z ListView do ListView

0

Cześć,
napotkałem taki oto problem :

Podczas gdy próbuję kopiować te elementy w ten sposób :

listView1.Items.Add(listView2.SelectedItems[0]);
listView2.Items.Remove(listView2.SelectedItems[0]);

to wychodzi błąd w trakcie programu i nie kopiuje mi zaznaczonego elementu.
Zaś podczas gdy kopiuję elementy w ten sposób :

listView1.Items.Add(listView2.SelectedItems[0].Text);
listView2.Items.Remove(listView2.SelectedItems[0]);

kopiowanie działa, ale nie kopiuje mi jednocześnie tooltipa do tego elementu.
Jak można to załatwić żeby działało kopiowanie z ToolTipem ?
Poniższy sposób :

listView1.Items.Add(listView2.SelectedItems[0].Text, listView2.SelectedItems[0].ToolTipText);
listView2.Items.Remove(listView2.SelectedItems[0]);

nie działa, ponieważ na drugim miejscu Add oczekuje czegoś innego niż mój ToolTipText, który jest mi potrzebny :)

Ma ktoś pomysł ?

0
Axel_cpu napisał(a)

to wychodzi błąd w trakcie programu i nie kopiuje mi zaznaczonego elementu.
...
Ma ktoś pomysł ?

ta - przeczytać błąd i pomyśleć

ListViewItem lvi = listView1.Items[0];
listView1.Items.Remove(lvi);
listView2.Items.Add(lvi);
0

Dzięki, teraz działa.

Choć muszę przyznać, że nie rozumiem różnicy między :

listView1.Items.Add(lvi);

a tym :

listView1.Items.Add(listView2.SelectedItems[0]);

skoro przecież :

ListViewItem lvi = listView2.SelectedItems[0];

Dopiero uczę się C#

0
Axel_cpu napisał(a)

nie rozumiem różnicy

VisualStudio2005 napisał(a)

Cannot add or insert the item 'n' in more than one place. You must first remove it from its current location or clone it.
Parameter name: item

0

jeden ListViewItem NIE MOŻE być jednocześnie podpięty w dwóch miejscach - najpierw go trzeba usunąć z jednego LV żeby można go było dodać do innego LV

0

dzięki,

a wiecie jak odznaczyć zaznaczony element w ListView ?

0

listView1.SelectedItems.Clear();

0

Cześć,
już tak próbowałem, ale to nie rozwiązuje mojego problemu bo gdy kod ma postać :

private void buttonDodaj_Click(object sender, EventArgs e)
{
   ListViewItem lvi = listView2.SelectedItems[0];
   if (listView2.SelectedItems.Count == 1)
      {
         listView2.Items.Remove(lvi);
         listView1.Items.Add(lvi);
         listView2.SelectedItems.Clear();
      }
}

podczas gdy nacisnę ponownie przycisk i tak przechodzi powyższy warunek (Count == 1) i wykonuje próbę skopiowania elementu, która kończy się błędem : (

0

Czytaj błędy i zwracaj uwagę gdzie występują!!!

To powinno pomóc:

            if (listView2.SelectedItems.Count > 0)
            {
                ListViewItem lvi = listView2.SelectedItems[0];
                if (listView2.SelectedItems.Count == 1)
                {
                    listView2.Items.Remove(lvi);
                    listView1.Items.Add(lvi);
                    listView2.SelectedItems.Clear();
                }
            }

A zamiast tego:

if (listView2.SelectedItems.Count == 1)            

Proponuję w konstruktorze:

listView2.MultiSelect = false;
0

Dzięki,
faktycznie działa.
Nie wiedziałem, że :

ListViewItem lvi = listView2.SelectedItems[0];

powoduje ponowny zwrot .Count > 0.

0
Axel_cpu napisał(a)

Dzięki,
faktycznie działa.
Nie wiedziałem, że :

ListViewItem lvi = listView2.SelectedItems[0];

powoduje ponowny zwrot .Count > 0.

To nie o to chodzi. W tej linii, jeśli nie masz wybranego elementu w ListView, odwołujesz się do nieistniejącego obiektu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1