Hallo Forum
Ich habe folgendes Problem.
Ich habe ein Form (durch instanzbildung Anzahl flexibel) mit checkboxen (Anzahl flexibel).
den Inhalt der checkboxen übernehme ich in eine Collection.
alles soweit gut.
Nur möchte ich aber eines der dargestellten form löschen, und damit die zugehörige collection, und jetzt fangen die Probleme an.
Ich möchte die Inhalte der anderen Form´s und Collection´s behalten und neu darstellen.
Ich habe jetzt alle mir bekannten Variationen durch versucht. komme aber nicht zum gewünschten Ergebnis.
immer wieder taucht eine Fehlermeldung auf, entweder beim Ändern der checkboxen, oder beim Aufruf und neu darstellen der verbleibenden Form oder beim löschen der Form selbst.
Frage: Wie löscht man eine Collectioninstanz ohne die anderen zu verlieren?
Hier mal mein code:
Public wt() As Collection
Public xTln As String
Public Testform() As frmform
Public Zähler As Integer
Public i As Integer
Public clickout As Boolean 'Form zur erstellung der Instanzen des erwähnten Form´s
Private Sub Command1_Click()
Zähler = Zähler + 1
ReDim Preserve Testform(Zähler)
Call testen
End Sub
'=====================================================================
Private Sub testen()
Dim temp As frmform
Dim i As Integer
Set temp = New frmform
temp.Formn = Zähler
Select Case Zähler
Case 1
temp.Move 0, 2000
Case Is > 1
temp.Move Testform(Zähler - 1).Left + Testform(Zähler - 1).Width + 150, _
Testform(Zähler - 1).Top
End Select
Set Testform(Zähler) = temp
Testform(Zähler).Show
End Sub
'=======================================================================
Private Sub Form_Load()
Me.Move 0, 0
Zähler = 0
End Sub 'Das eigentliche Form
Private xwt As Collection
Private i As Integer
Private j As Integer
Private x As Integer
Private xFormn As Integer
Public Property Get Formn() As Integer
Formn = xFormn
End Property
Public Property Let Formn(ByVal vNewValue As Integer)
xFormn = vNewValue
End Property
Private Sub Check1_Click(Index As Integer)
On Error Resume Next 'Fehler der bei wt.remove für die erste Eintragung
' auftritt bewusst übersprungen
'Select Case Me.Check1(Index).Value
'Case 0
wt(Me.Formn).Remove (CStr(Me.Formn & Index))
wt(Me.Formn).Add Me.Check1(Index).Value, (CStr(Me.Formn & Index))
'Case 1
'wt(Me.Formn).Add Me.Check1(Index).Value, CStr(Me.Formn & Index)
'End Select
End Sub
'=================================
Private Sub Command1_Click()
Call anzeigen
End Sub
'=================================
Private Sub Command2_Click()
Set xwt = New Collection
Dim i As Integer
If CInt(Me.Text1.Text) = UBound(wt) Then Set wt(UBound(wt)) = Nothing: Exit Sub
For i = (CInt(Me.Text1.Text)) To UBound(wt)
If i <> UBound(wt) Then
Set xwt = wt(i + 1)
Else
Set xwt = wt(i)
End If
Set wt(i) = xwt
Next
End Sub
'=================================
Private Sub Form_Load()
ReDim Preserve wt(Me.Formn)
Set wt(Me.Formn) = New Collection
Me.Caption = "Form " & Zähler
For i = 1 To 4'die 4 nur zu testzwecken wir durch eine Variable ersetz die
' wo anders festgelegt wird
Load Me.Check1(i)
Select Case i
Case 1
Me.Check1(i).Move 0, 1000
Case Is > 1
Me.Check1(i).Move Me.Check1(i - 1).Left + Me.Check1(i - 1).Width _
+ 30, Me.Check1(i - 1).Top
End Select
Me.Check1(i).Visible = True
Me.Check1(i).Value = 1
Next
End Sub 'Modul zum Anzeigen der Collectioninhalte
Public Sub anzeigen()
On Error Resume Next
Dim temp As Collection
Dim j As Integer
Dim c As Integer
For i = 1 To UBound(wt)
For j = 1 To Testform(1).Check1.UBound
Debug.Print wt(i)(CStr(i & j)), i, j
Debug.Print "--------------------"
Next
Next
End Sub Ich hoffe mir kann jemand helfen.
Dafür bedanke ich mich im Voraus
LG Günni |