Drag and Drop in Userform3 (Nepumuk)
03.07.2014 11:39:54
Ewald
du hast den Code für die Galerie von Ivonne Drag and Drop in Userform geschrieben.
Da ja jetzt die WM ist, kam der Gedanke dies für die Darstellung der Mannschaftsaufstellung zu benutzen.
Dies ist auch durch Erweiterung deines Codes gelungen.
Nur gibt es einen Unterschied den ich nicht hinbekomme.
Die Images der ersten Klasse(Drag) werden nicht beim Starten der Userform erstellt und gefüllt, sondern dies soll erst nach Auswahl einer Mannschaft durch eine Combobox erfolgen.
Also Land in Combobox auswählen, Land in Tabelle suchen und dann aus dieser Spalte die Bildadressen nehmen und die Image füllen.(aus Nebenspalte den Controltiptext.)
Frage ist jetzt, da ja zwei Comboboxen(für jede Mannschaft eine) , wie bekomme ich die Images dann in die Klasse.
Wenn eine Mannschaft ausgewählt ist, habe ich ja erst 23 Images von 46, wenn ich jetzt die 46 in die Klasse schreiben will, bekomme ich einen Fehler. Außerdem soll es egal sein, welche Mannschaft ich zuerst auswähle.
Auch soll es möglich sein, jedem Spieler eventuell bekommene Karten(gelb,gelbrot,rot) hinzuzufügen und auch geschossene Tore.
Ob dies auch mit Image oder besser mit Label passiert ist mir noch unklar. Für ein Label müßte ich dann ja per Klick dieses Image als aktives Control auslesen.
Darstellung soll die Farbe der Karte und die Min sein.
Die Min kann aus einem auf der Userform laufendem Timer ausgelesen werden.
Der jetzige Code in der Userform (Klassen wie bei dir)
Private mobjSourceImageClassCollection As Collection
Private mobjTargetImageClassCollection As Collection
Private Sub UserForm_Activate()
Dim ialngIndex As Long
Dim sngLeft As Single
Dim avntValues As Variant
Dim objImage As MSForms.Image
Dim objSourceImageClass As clsSourceImage
Dim objTargetImageClass As clsTargetImage
With Worksheets("Tabelle2")
avntValues = .Range("A1:E46").Value2
End With
Set mobjSourceImageClassCollection = New Collection
sngLeft = 10
For ialngIndex = 1 To 23
Set objImage = Controls.Add(bstrProgID:="Forms.Image.1", _
Name:="Image" & CStr(ialngIndex))
With objImage
.Left = sngLeft
.Top = 0
.Width = 30
.Height = 40
.PictureSizeMode = fmPictureSizeModeStretch
Set .Picture = LoadPicture(avntValues(ialngIndex, 1))
.ControlTipText = avntValues(ialngIndex, 5)
End With
Set objSourceImageClass = New clsSourceImage
Set objSourceImageClass.Image = objImage
Call mobjSourceImageClassCollection.Add(Item:=objSourceImageClass)
sngLeft = sngLeft + 30
Next
sngLeft = 10
For ialngIndex = 24 To 46
Set objImage = Controls.Add(bstrProgID:="Forms.Image.1", _
Name:="Image" & CStr(ialngIndex))
With objImage
.Left = sngLeft
.Top = 490
.Width = 30
.Height = 40
.PictureSizeMode = fmPictureSizeModeStretch
Set .Picture = LoadPicture(avntValues(ialngIndex, 1))
.ControlTipText = avntValues(ialngIndex, 5)
End With
Set objSourceImageClass = New clsSourceImage
Set objSourceImageClass.Image = objImage
Call mobjSourceImageClassCollection.Add(Item:=objSourceImageClass)
sngLeft = sngLeft + 30
Next
Set mobjTargetImageClassCollection = New Collection
For ialngIndex = 50 To 71
Set objTargetImageClass = New clsTargetImage
With objTargetImageClass
Set .Image = Controls("Image" & CStr(ialngIndex))
Set .ChildImage = Controls("Image" & CStr(ialngIndex + 22))
Set .UserForm = Me
End With
Call mobjTargetImageClassCollection.Add(Item:=objTargetImageClass)
Next
For ialngIndex = 72 To 93
Set objTargetImageClass = New clsTargetImage
With objTargetImageClass
Set .Image = Controls("Image" & CStr(ialngIndex))
Set .UserForm = Me
End With
Call mobjTargetImageClassCollection.Add(Item:=objTargetImageClass)
Next
Set objTargetImageClass = Nothing
Set objSourceImageClass = Nothing
Set objImage = Nothing
End Sub
Private Sub UserForm_Terminate()
Set mobjSourceImageClassCollection = Nothing
Set mobjTargetImageClassCollection = Nothing
HBZ = False
VHZ = False
End Sub
Gruß Ewald