2017-03-11 5 views
1

Ich verwende ein "OrderLines" -Formular auf verschiedene Arten (nach Bestellnummer, nach Produktcode, nach Kunde, Lieferant, ...). Jede Instanz davon kann eine neue Instanz davon starten.wie ein Formular direkt in einer Sammlung zu instanziieren

Beispiel:

  • die erste Instanz dieses Formulars alle Reihenfolge auflistet Linien einer bestimmten Reihenfolge
  • indem in diesem Fall auf eine Produkt-ID Doppelklick, der Benutzer eine zweite Instanz dieser Form bringt, dass die Listen alle Linien, um dieses spezielle Produkts in Bezug auf
  • von in der zweiten Instanz auf einen Kundencode Doppelklick, startet der Anwender eine dritte Instanz, die alle Auftragszeilen zu diesen spezifischen Kunden
  • und so weiter ...
  • 01 listet

    In "Erklärungen" Modul:

    Global cForms As Collection 
        Global fForms(20) As Form 
    

    In Aufruf Form:

    x = boring_function_to_find_a_free_room_in_fForms() 
        Set fForms(x) = New Form_OrderLines 
        fForms(x).SetFocus 
        cForms.add Item:=cForms(x), Key:=CStr(cForms(x).Hwnd) 
    

    Meine Frage

Um die Form "Orderlines", verwende ich diese Art von Code zu instanziiert ist: Anstatt bohren_function_to_find_a_free_room_in_fForms() und fForms (x) zu verwenden, um das Formular zu instanziieren, gibt es eine Möglichkeit, es "direkt" in der Sammlung zu instanziieren?

Ich habe versucht:

cForms.add Item:=(New Form_OrderLines) 

es funktioniert, aber:

1) jede neue Instanz schließt die vorherige Instanz

2) Ich weiß nicht, wie das Äquivalent zu schreiben "Schlüssel: = CStr (cForms (x) .Hwnd)"

+0

Warum brauchen Sie cForms, wofür verwenden Sie es, das das Array nicht erreichen kann? Um in dem Array instanziieren seine Set fForms (langweilige_Funktion_zu_finden_einer_freien_Raum_in_Forms()) = New Form_OrderLines – Absinthe

Antwort

0

Sie benötigen das Array nicht, wenn Sie die Sammlung haben.

Dies ist die good'ol'code, die mehrere Instanzen verwendet worden ist durch ihre hWnd zu verfolgen:

Option Compare Database 

Public colForms As New Collection 
Public mintI As Integer 

Public Sub NewFormInstance(frmOld As Form_MyForm) 

  Dim frm As Form_MyForm 
  
  Set frm = New Form_MyForm 
  
  mintI = mintI + 1 
  colForms.Add Item:=frm, Key:=frm.Hwnd & "" 
  frm.Caption = "My Form " & mintI 
  DoCmd.MoveSize (mintI + 1) * 80, (mintI + 1) * 350  
    frm.Visible = True 

End Sub 

Sie können auf einfache Weise dieses Szenario zu Ihrem anzupassen.

+0

Danke, es funktioniert gut. auch wenn ich nicht verstehe, wie es funktioniert: Wie kann die Formularinstanz bis zum Ende der "frm" -Variablen am Ende der Ausführung von NewFormInstance() überleben? –

+0

'frm' stirbt nicht, sondern wird in der Sammlung gespeichert, um später mit seinem Schlüssel identifiziert zu werden. – Gustav

Verwandte Themen