none
Drag/Drop zwischen listviews: Bug? RRS feed

  • Frage

  • Moin,
    auf der Grundlage von vb-Helper frage ich in der dragdrop-Methode die listviewitems des Ursprungs-Listviews ab: (LVW_DragDrop ist ein sub, für das ich einen handler gesetzt habe für alle .DragDrop-Ereignisse aller meiner listviews.)

    Private Sub LVW_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) 'sender ist nun das ziel-listview Dim lvw As ListView = CType(sender, ListView) Dim dragged_items As List(Of ListViewItem) = e.Data.GetData("List(Of " & "ListViewItem)")
    Dim li As ListViewItem

    Klappt alles prima, ich kann mit

    For Each li In dragged_items

    auf alle Eigenschaften meiner items zugreifen AUßER AUF .name.

    Habe es überprüft, im Ausgangs-Listitem ist die .name-Eigenschaft gesetzt.

    Ist das ein Bug?

    Gibts einen workaround? (Also wie kriege ich die listview-items des drag-from-listviews ansonsten)

    Gruß und Dank!
    TH


    Samstag, 9. November 2013 15:22

Antworten

  • Hallo,

    die Name Eigenschaft ist bei allen Steuerelementen primär für die Entwurfszeit gedacht[1].

    Für "vollwertige" Steuerelemente wird zwar oft von den Designern erzeugt.

    Bei ListViewItems - die keine Steuerelemente sind - jedoch nicht und Namen bei ListViewSubItems, die im Editor hinterlegt werden können werden, werden nicht gespeichert.  Dort und bei allen Elementen, die zur Laufzeit erzeugt werden, muss man sie immer selbst setzen / erzeugen.

    Nachtrag: ListViewItem.Name reflektiert den Wert aus ListViewSubItem(0).Name. Der Wert wird u. a. beim ListViewItem.Clone() nicht übernommen. Wenn man eine "Identifikation" braucht, sollte man eher die Tag-Eigenschaft nutzen, die wird übertragen.

    Gruß Elmar

    [1] In der Urfassung (.NET 1.0 Beta) gab es gar keine Namen; die kam erst rein, weil sich die Visual Basic Fraktion beschwerte.

    Samstag, 9. November 2013 16:33
    Beantworter

Alle Antworten

  • Hi

    bei mir Funktioniert das.

      Dim li As List(Of ListViewItem) = New List(Of ListViewItem)()
    
            For Each item As ListViewItem In li
                Dim Name = item.Name
    
            Next

    Las mal die erste definition vor der Schleife weg.

      Dim li As ListViewItem

    Wenn das noch nicht klappt, zeig bitte mal den Quellcode der oben fehlt (fals da welcher ist.)

    Ansonsten bitte noch mal die Framework Version angeben. Ich hab es jetzt mit 4.0 ausprobiert.

    MFG

    Björn

    Samstag, 9. November 2013 16:15
  • Danke Björn.

    das was Du schreibst ist glaub ich nicht mein Problem.

    Es scheint mir, dass beim Übergeben von

    Dim dragged_items As List(Of ListViewItem) = e.Data.GetData("List(Of " & "ListViewItem)")

    die .name-Eigenschaft verloren geht.

    Framework ist 3.5

    Gruß TH

    Samstag, 9. November 2013 16:30
  • Hallo,

    die Name Eigenschaft ist bei allen Steuerelementen primär für die Entwurfszeit gedacht[1].

    Für "vollwertige" Steuerelemente wird zwar oft von den Designern erzeugt.

    Bei ListViewItems - die keine Steuerelemente sind - jedoch nicht und Namen bei ListViewSubItems, die im Editor hinterlegt werden können werden, werden nicht gespeichert.  Dort und bei allen Elementen, die zur Laufzeit erzeugt werden, muss man sie immer selbst setzen / erzeugen.

    Nachtrag: ListViewItem.Name reflektiert den Wert aus ListViewSubItem(0).Name. Der Wert wird u. a. beim ListViewItem.Clone() nicht übernommen. Wenn man eine "Identifikation" braucht, sollte man eher die Tag-Eigenschaft nutzen, die wird übertragen.

    Gruß Elmar

    [1] In der Urfassung (.NET 1.0 Beta) gab es gar keine Namen; die kam erst rein, weil sich die Visual Basic Fraktion beschwerte.

    Samstag, 9. November 2013 16:33
    Beantworter
  • Nachtrag: ListViewItem.Name reflektiert den Wert aus ListViewSubItem(0).Name. Der Wert wird u. a. beim ListViewItem.Clone() nicht übernommen.

    Oh, Elmar, das isses!! Habe vorher natürlich das listviewitem geclont, dabei ist der .name verloren gegangen.

    Der Vorteil gegenüber .tag ist halt, dass der .name gleichzeitig der .key ist...

    Gruß!

    TH

    Samstag, 9. November 2013 20:07