ListView - Anzeige Bilder nach DragDrop

03/06/2009 - 13:25 von Manuela Brandhuber | Report spam
Hallo NG,

ich verwende ein ListView in dem ich Bilder aus einer ImageList anzeige und
die Elemente innerhalb des LV über DragDrop ordne. Funktioniert soweit auch
ganz gut, nur daß das für das jeweils gezogene Element nach Abschluss des
Vorgangs dann kein Bild mehr angezeigt wirrd. Als Workaround mache ich dann
folgendes:

'ImageList.Images.Add("test", DirectCast(New Bitmap(178, 253),
Drawing.Image))
'ImageList.Images.RemoveByKey("test")

Aber das finde ich natürlich nicht besonders toll.

Ich hàtte es schon mit einer ganzen Reihe anderer Alternativen versucht,
aber nichts will klappen:

ListView.Refresh()
ListView.SuspendLayout()
ListView.ResumeLayout()
ListView.Invalidate()
ListView.PerformLayout()
ListView.Update()
ListView.RedrawItems(0, ListView.Items.Count - 1, False)

Kennt ihr da noch eine andere Möglichkeit, die etwas "schöner" ist als mein
Workaround?

Liebe Grüße,

Manu
 

Lesen sie die antworten

#1 Peter Fleischer
03/06/2009 - 20:06 | Warnen spam
"Manuela Brandhuber" schrieb im Newsbeitrag
news:h05mj7$bi5$00$

ich verwende ein ListView in dem ich Bilder aus einer ImageList anzeige
und die Elemente innerhalb des LV über DragDrop ordne. Funktioniert soweit
auch ganz gut, nur daß das für das jeweils gezogene Element nach Abschluss
des Vorgangs dann kein Bild mehr angezeigt wirrd. ...



Hi Manuela,
ich jabe mal das Szenario nachgestellt und kann ohne weitere Angaben von dir
kein Problem erkennen. Hier meine Demo. Beim Drag&Drop wird das zu
verschiebende Element einfach hintenan gesetzt.

Option Infer On
Option Strict On

Public Class Form1

Private WithEvents lv As New ListView With {.Dock = DockStyle.Fill, _
.SmallImageList = TestData.IL, _
.View = View.List, _
.AllowDrop = True}

Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Me.Controls.AddRange(New Control() {lv})
For i = 1 To 10
lv.Items.Add("Zeile " & i.ToString)
lv.Items(i - 1).ImageIndex = i - 1
Next
End Sub

Private Sub lv_ItemDrag(ByVal sender As Object, _
ByVal e As System.Windows.Forms.ItemDragEventArgs)
_
Handles lv.ItemDrag
DoDragDrop(e.Item, DragDropEffects.Move)
End Sub

Private Sub lv_DragEnter(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DragEventArgs) _
Handles lv.DragEnter
e.Effect = DragDropEffects.Move
End Sub

Private Sub lv_DragDrop(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DragEventArgs) _
Handles lv.DragDrop
If (e.Data.GetDataPresent(GetType(ListViewItem))) Then
Dim lvi = CType(e.Data.GetData(GetType(ListViewItem)), ListViewItem)
lv.Items.Remove(lvi)
lv.Items.Add(lvi)
End If
End Sub

End Class

Friend Class TestData
Public Shared IL As New ImageList
Shared Sub New()
For i = 1 To 10
Dim img As New Bitmap(16, 16)
Using g = Graphics.FromImage(img)
g.DrawString(i.ToString, _
New Font(FontFamily.GenericSerif, 10, _
FontStyle.Regular, GraphicsUnit.Pixel), _
Brushes.Black, New RectangleF(0, 0, 16, 16))
End Using
IL.Images.Add(img)
Next
End Sub
End Class


Viele Grüsse
Peter

Ähnliche fragen