{"id":55000270,"date":"2005-04-01T00:00:00","date_gmt":"2020-05-06T15:17:57","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=270"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Formular_mehrfach_anzeigen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Formular_mehrfach_anzeigen\/","title":{"rendered":"Formular mehrfach anzeigen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg05.met.vgwort.de\/na\/20d48971a1764d7599ec3b04e8e9db48\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Andr&eacute; Minhorst, Duisburg<\/b><\/p>\n<p><b>In den meisten F&auml;llen reicht eine Instanz eines Formulars zum Darstellen der gew&uuml;nschten Daten aus. Selbst wenn man einmal zwei oder mehr Datens&auml;tze vergleichen m&ouml;chte, kann man diese in Listenform untereinander anzeigen. Wenn die betreffenden Datens&auml;tze allerdings einmal mehr Felder enthalten, als nebeneinander angezeigt werden k&ouml;nnen, kommt schnell der Wunsch nach der Verwendung mehrerer Instanzen eines Formulars mit unterschiedlichen Datens&auml;tzen auf. Wie Sie das realisieren, erfahren Sie im vorliegenden Beitrag.<\/b><\/p>\n<p>Die Anzeige mehrerer gleicher Formulare mit verschiedenen Datens&auml;tzen ist vor allem sinnvoll, wenn Sie beispielsweise Daten von Artikeln, Kunden, Lieferanten oder Mitarbeitern ansehen und vergleichen m&ouml;chten.<\/p>\n<p>Wenn Sie die Formulare aus Bild 1 beispielsweise noch nebeneinander positionieren, k&ouml;nnen Sie die Eigenschaften der Artikel gut miteinander vergleichen.<\/p>\n<p><IMG height=\"340\" src=\"..\/fileadmin\/_temp_\/{13313950-9FD7-4ECE-8CB0-D3671F55936E}\/pic001.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1:  Mehrere Formularinstanzen mit verschiedenen Artikeln<\/span><\/b><\/p>\n<h2>Mehrere physikalisch vorhandeneFormulare<\/h2>\n<p>Wer nicht zu VBA greifen m&ouml;chte, um mehrere Datens&auml;tze gleichzeitig in je einem einzigen Formular anzuzeigen, kann theoretisch das gew&uuml;nschte Formular mehrmals kopieren und mit unterschiedlichen Namen versehen. Ganz davon abgesehen, dass auch hier ein wenig VBA-Code n&ouml;tig ist, um beispielsweise zu pr&uuml;fen, welche Kopie des Formulars schon ge&ouml;ffnet ist und welche man als N&auml;chstes verwendet, hat diese Variante zwei gro&szlig;e Nachteile: Erstens m&uuml;ssen Sie &auml;nderungen entweder direkt an allen Exemplaren durchf&uuml;hren oder bei jeder &auml;nderung alle Kopien l&ouml;schen und durch neue Kopien des ge&auml;nderten Originalformulars ersetzen. Zweitens ist diese Variante nicht besonders flexibel: Die Anzahl der verf&uuml;gbaren Formulare ist in jedem Fall begrenzt.<\/p>\n<h2>Mehrere Instanzen eines Formulars<\/h2>\n<p>Die alternative Variante besteht in der Verwendung eines einzigen Formulars, das Sie mehrfach &ouml;ffnen k&ouml;nnen &#8211; und zwar mit verschiedenen Inhalten. Dazu ist zwar ein wenig VBA-Code erforderlich, aber es handelt sich nur um wenige Zeilen, wie Sie nachfolgend sehen werden.<\/p>\n<p>Das nachfolgend beschriebene Beispiel bezieht sich auf die Anzeige von Daten verschiedener Artikel aus der Nordwind-Datenbank. Um den Aufwand beim Nachvollziehen des Beispiels gering zu halten, k&ouml;nnen Sie einige bereits bestehende Objekte aus der Nordwind-Datenbank verwenden.<\/p>\n<p>Wenn Sie das Beispiel nachvollziehen m&ouml;chten, legen Sie eine neue, leere Datenbank an und importieren zun&auml;chst einige Objekte aus der Nordwind-Datenbank:<\/p>\n<li>F&uuml;hren Sie den Men&uuml;befehl Datei\/Externe Daten\/Importieren&#8230; aus.<\/li>\n<li>W&auml;hlen Sie die Datei Nordwind.mdb aus. Sie befindet sich &uuml;blicherweise im Office-Verzeichnis.<\/li>\n<li>Importieren Sie die Tabellen Artikel, Kategorien und Lieferanten und das Formular Artikel. (<\/li>\n<p>Die Anweisung DoCmd.OpenForm &ouml;ffnet jeweils die Standardinstanz eines Formulars. Auch das wiederholte Aufrufen bringt keine weiteren Instanzen hervor.<\/p>\n<p>Ein Formular ist aber ein Objekt und diese lassen sich in der Regel auch mehrfach erzeugen. Dazu deklarieren Sie einfach eine Variable mit einem der gew&uuml;nschten Formularklasse entsprechenden Datentyp. Diesen Datentyp k&ouml;nnen Sie ganz leicht ermitteln: Es handelt sich dabei um den Formularnamen mit vorangestelltem &#8222;Form_&#8220;. Um eine Objektvariable zu deklarieren, deren Datentyp der Klasse des zu erzeugenden Formulars entspricht, verwenden Sie im Fall des Formulars Artikel also folgende Zeile:<\/p>\n<pre>Dim frm As Form_Artikel<\/pre>\n<h3>Hinweis<\/h3>\n<p>Wenn Sie eine entsprechende Objektvariable f&uuml;r einen Bericht erzeugen m&ouml;chten, gehen Sie genauso vor &#8211; lediglich das Suffix des Ausdrucks f&uuml;r den Datentyp lautet dann &#8222;Report_&#8220;. <\/p>\n<p>Nun f&uuml;llen Sie die Objektvariable mit dem Objekt:<\/p>\n<pre>Set frm = New Form_Artikel<\/pre>\n<p>Damit haben Sie eine neue Instanz des Formulars erzeugt, die aber noch nicht sichtbar ist. Die n&auml;chste Anweisung lautet folglich:<\/p>\n<pre>frm.Visible = True<\/pre>\n<p>Wenn Sie diese drei Anweisungen in eine Prozedur in einem Standardmodul packen und &uuml;ber das Testfenster aufrufen, sollten Sie doch eigentlich die gew&uuml;nschten Formulare erstellen k&ouml;nnen.<\/p>\n<pre>Public Sub FormularinstanzErstellen()\r\n    Dim frm As Form_Artikel\r\n    Set frm = New Form_Artikel\r\n    frm.Visible = True\r\nEnd Sub<\/pre>\n<p>Oder doch nicht Wenn Sie es ausprobieren, sehen Sie zwar ein kurzes Aufflackern, aber das Formular verschwindet sofort wieder. Kein Wunder: Die innerhalb einer Prozedur deklarierten und erzeugten Objekte leben nicht l&auml;nger als die Prozedur selbst. Klammern Sie also die Deklaration aus der Prozedur aus und &auml;ndern Sie ihren G&uuml;ltigkeitsbereich auf Public:<\/p>\n<pre>Public frm As Form_Artikel<\/pre>\n<p>Ein erneuter Aufruf der Prozedur FormularinstanzErstellen f&uuml;hrt zum Erfolg: Das Artikel-Formular erscheint. Aktivieren Sie einen anderen als den zuerst angezeigten Artikel-Datensatz. F&uuml;hren Sie die Prozedur zum Erzeugen einer Formularinstanz erneut aus und schauen Sie, was passiert: Das erste Formular verschwindet und ein neues erscheint &#8211; das erkennen Sie daran, dass wieder der erste Datensatz der Datenherkunft angezeigt wird. Das war eigentlich zu erwarten, denn der Inhalt der Objektvariablen wird mit dem neuen Objekt &uuml;berschrieben.<\/p>\n<p>Wie es aussieht, ben&ouml;tigen Sie also mehrere Objektvariablen, um mehr als eine Instanz des Formulars anzuzeigen. Damit w&auml;ren Sie wieder an einer &auml;hnlichen Stelle wie am Anfang. Dort gab es ja alternativ zu diesem Weg die M&ouml;glichkeit, einfach mehrere gleiche Formulare zu erstellen &#8211; und nun soll das statische Deklarieren mehrerer Objektvariablen das Ende vom Lied sein Nein, das ist es nat&uuml;rlich nicht. Objektvariablen k&ouml;nnen Sie zur Laufzeit deklarieren und erzeugen, so viele Sie m&ouml;chten &#8211; und Sie k&ouml;nnen auch unterschiedliche Instanzen des gew&uuml;nschten Objekts damit kontrollieren.<\/p>\n<h3>Formulare im Collection-Objekt<\/h3>\n<p>Das Zauberwort hei&szlig;t Collection-Objekt. Das ist das Pendant zu Arrays, nur dass Sie darin Objekte aufbewahren und wieder entfernen und nat&uuml;rlich auch auf die enthaltenen Objekte zugreifen k&ouml;nnen.<\/p>\n<p><!--30percent--><\/p>\n<p>F&uuml;r ein solches Objekt gelten genau die gleichen Regeln wie f&uuml;r die &uuml;brigen Variablen: Sie haben den gleichen G&uuml;ltigkeitsbereich &#8211; also global, objektweit oder prozedurweit &#8211; und werden gleichzeitig mit dem Objekt, in dem sie enthalten sind, zerst&ouml;rt.<\/p>\n<p>Ein Collection-Objekt hat zwei Methoden und zwei Eigenschaften:<\/p>\n<li>Add: F&uuml;gt ein Objekt hinzu.<\/li>\n<li>Remove: Entfernt ein Objekt.<\/li>\n<li>Count: Gibt die Anzahl der enthaltenen Objekte wieder.<\/li>\n<li>Item: Dient zum Bezugnehmen auf ein bestimmtes Objekt innerhalb der Collection.<\/li>\n<p>Im folgenden Beispiel f&uuml;gen Sie die Kenntnis um die Tatsache, dass man Formular-Objekte beliebig oft erzeugen und diese Objekte in Collections sammeln kann, zu einer kleinen Beispielanwendung zusammen.<\/p>\n<p>Sie haben bereits erfahren, dass Objekte wie auch Collections wieder zerst&ouml;rt werden, wenn auch das Objekt, in dessen G&uuml;ltigkeitsbereich Sie diese deklariert haben, zerst&ouml;rt wird.<\/p>\n<p>Im Beispiel soll dieses Objekt ein Formular sein, das die Artikelbezeichnungen aus der Artikeltabelle in einem Listenfeld anzeigt und einige Schaltfl&auml;chen zum Anzeigen und Entfernen eines Detailformulars zu dem jeweiligen Artikel enth&auml;lt. Die damit erzeugten Formularobjekte k&ouml;nnen manuell wieder geschlossen werden, aber sp&auml;testens mit dem Schlie&szlig;en des aufrufenden Formulars ist ihre Zeit vorbei.<\/p>\n<p>Das Formular ist recht einfach aufgebaut, wie Bild 2 zeigt. Das Listenfeld hat den Namen lstArtikel und als Datensatzherkunft die Tabelle Artikel.<\/p>\n<p><IMG height=\"196\" src=\"..\/fileadmin\/_temp_\/{13313950-9FD7-4ECE-8CB0-D3671F55936E}\/pic002.png\" width=\"238\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2:  Formular zum &ouml;ffnen der Detailansicht von Artikeln<\/span><\/b><\/p>\n<p>Sowohl die Prozedur, die durch das Beim Doppelklicken-Ereignis des Listenfeldes, als auch die, die durch das Beim Klicken-Ereignis der Schaltfl&auml;che cmdAnzeigen ausgel&ouml;st wird, enth&auml;lt lediglich die folgende Anweisung:<\/p>\n<pre>ArtikelAnzeigen Me.lstArtikel, _    Me.lstArtikel.Column(1)<\/pre>\n<p>Die aufgerufene Prozedur ArtikelAnzeigen enth&auml;lt die eigentliche Funktion. Sie finden diese Prozedur in Quellcode 2.<\/p>\n<pre>Private colFrmArtikel As New Collection\r\nPrivate Private Sub ArtikelAnzeigen(lngArtikelID As _        Long, strArtikel As String)\r\n    ''Kontrollieren, ob Artikel schon angezeigt wird...\r\n    Dim i As Integer\r\n    Dim intFormCount As Integer\r\n    intFormCount = colFrmArtikel.Count\r\n    If intFormCount &gt; 0 Then\r\n        For i = 1 To intFormCount\r\n            If colFrmArtikel.Item(i).Form.Tag = _                \"Artikel\" & lngArtikelID Then\r\n                colFrmArtikel.Item(\"Artikel\" & _                    lngArtikelID).Form.SetFocus\r\n                Exit Sub\r\n            End If\r\n        Next i\r\n    End If\r\n    ''... und falls nicht, eine neue Formularinstanz     ''mit dem Artikel &ouml;ffnen.\r\n    Dim frm As Form_Artikel\r\n    Set frm = New Form_Artikel\r\n    With frm\r\n        .Filter = \"[Artikel-Nr] = \" & lngArtikelID\r\n        .FilterOn = True\r\n        .Tag = \"Artikel\" & lngArtikelID\r\n        .Caption = \"Artikel: \" & strArtikel\r\n        .Visible = True\r\n    End With\r\n    colFrmArtikel.Add frm, \"Artikel\" & lngArtikelID\r\n    intFormCount = colFrmArtikel.Count\r\n    DoCmd.MoveSize (intFormCount * 500) + 1000, _        (intFormCount * 500) + 1000\r\nEnd Sub<\/pre>\n<p><b>Quellcode 2<\/b><\/p>\n<p>Die allein stehende Deklaration der Collection colFrmArtikel sorgt daf&uuml;r, dass die Collection formularweit verf&uuml;gbar ist und erst zerst&ouml;rt wird, wenn Sie das Formular schlie&szlig;en.<\/p>\n<p>Damit werden dann auch alle in der Collection enthaltenen Formulare &#8211; also die Detailansichten der Artikel &#8211; geschlossen.<\/p>\n<p>Die Prozedur ArtikelAnzeigen pr&uuml;ft zun&auml;chst, ob das zu instanzierende Formular bereits vorhanden ist. Vergessen Sie diesen Teil vorerst &#8211; Sie ben&ouml;tigen noch einige Details, um ihn zu verstehen. Schauen Sie sich zun&auml;chst an, was die Prozedur macht, wenn der betreffende Artikel noch nicht in einem Formular angezeigt wird.<\/p>\n<p>In dem Fall deklariert die Prozedur zun&auml;chst eine Objektvariable des Datentyps Form_Artikel. Mit der Set-Anweisung erzeugt sie eine neue Instanz des Form_Artikel-Objekts.<\/p>\n<p>Mit dieser Instanz des Artikel-Formulars passieren dann folgende Dinge:<\/p>\n<li>Der Filter wird auf den aktuell im Listenfeld markierten Artikel gesetzt und aktiviert.<\/li>\n<li>Die Tag-Eigenschaft erh&auml;lt einen Ausdruck, der sich aus der Zeichenkette &#8222;Artikel&#8220; und der Artikelnummer zusammensetzt.<\/li>\n<li>Der Titel des Formulars wird aus der Zeichenkette Artikel: und der Artikelnummer zusammengesetzt.<\/li>\n<li>Das Formular wird sichtbar gemacht.<\/li>\n<p>Nun muss die Instanz noch im Collection-Objekt untergebracht werden. Dazu verwendet die Prozedur dessen Add-Methode. Die Methode hat zwei Parameter: Den Parameter namens Item f&uuml;llen Sie mit der das Formular repr&auml;sentierenden Objektvariablen und  dem Parameter Key weisen Sie den gleichen Wert zu, den bereits die Tag-Eigenschaft der neuen Formularinstanz erhalten hat. So k&ouml;nnen Sie beispielsweise mit dem folgenden Ausdruck das Formular referenzieren, das den Artikel mit der Artikelnummer 4 anzeigt:<\/p>\n<pre>colFrmArtikel.Item(\"Artikel\" _    & lngArtikelID).Form\r\nPrivate Sub cmdSchliessen_Click()\r\n    ArtikelAusblenden \"Artikel\" & Me.lstArtikel\r\nEnd Sub<\/pre>\n<p><b>Quellcode 3<\/b><\/p>\n<pre>Public Sub ArtikelAusblenden(strTag As String)\r\n    On Error GoTo ArtikelAusblenden_Err\r\n    colFrmArtikel.Item(strTag).Tag = \"\"\r\n    colFrmArtikel.Remove strTag\r\nArtikelAusblenden_Exit:\r\n    Exit Sub\r\nArtikelAusblenden_Err:\r\n    If Err.Number = 5 Or Err.Number = 9 Then\r\n        GoTo ArtikelAusblenden_Exit\r\n    Else\r\n        MsgBox Err.Number & \" \" & Err.Description\r\n        GoTo ArtikelAusblenden_Exit\r\n    End If\r\nEnd Sub<\/pre>\n<p><b>Quellcode 4<\/b><\/p>\n<p>Zuletzt sorgen Sie noch daf&uuml;r, dass jedes neue Formular versetzt zum vorherigen angezeigt wird. Dazu ermitteln Sie die Anzahl der bisherigen Instanzen des Formulars und verschieben die neue Instanz um einen entsprechenden Wert nach rechts unten.<\/p>\n<p>Jetzt, da Sie wissen, dass Sie &uuml;ber den in der Tag-Eigenschaft enthaltenen Wert auf den entsprechenden Eintrag des Formulars in der Collection colFrmArtikel zugreifen k&ouml;nnen, macht eine Betrachtung des ersten Teils der Prozedur ArtikelAnzeigen Sinn: Hier z&auml;hlt die Prozedur zun&auml;chst die Elemente der Collection und speichert das Ergebnis in der Integer-Variablen intFormCount. Wenn eines oder mehr Elemente enthalten sind, durchl&auml;uft eine For Next-Schleife alle Elemente der Collection und &uuml;berpr&uuml;ft, ob die Tag-Eigenschaft eines der in der Collection enthaltenen Formulare mit dem Wert &uuml;bereinstimmt, der f&uuml;r die neue Instanz verwendet w&uuml;rde. Ist das der Fall und damit schon ein Formular f&uuml;r diesen Artikel vorhanden, erh&auml;lt dieses den Fokus und die Prozedur wird verlassen. Anderenfalls folgt das weiter oben bereits beschriebene Anlegen der neuen Instanz.<\/p>\n<p>Die Beispielanwendung soll die M&ouml;glichkeit bieten, eine Formularinstanz eines im Listenfeld ausgew&auml;hlten Artikels wieder zu schlie&szlig;en. Dazu dient die Schaltfl&auml;che cmdSchliessen. Die Prozedur, die durch die Ereigniseigenschaft Beim Klicken ausgel&ouml;st wird, sieht wie in Quellcode 3 aus.<\/p>\n<p>Die Prozedur ruft eine Routine namens ArtikelAusblenden auf und &uuml;bergibt einen aus der Zeichenkette &#8222;Artikel&#8220; und der Artikelnummer des im Listenfeld ausgew&auml;hlten Artikel als Parameter &#8211; das ist der Wert, der weiter oben bereits als Inhalt der Tag-Eigenschaft der Formularinstanzen und als Key-Wert der Collection-Elemente verwendet wurde.<\/p>\n<p>Die Prozedur ArtikelAusblenden setzt den Wert der Tag-Eigenschaft des gesuchten Formulars auf eine leere Zeichenfolge. Den Hintergrund f&uuml;r diesen Schritt erfahren Sie weiter unten. Au&szlig;erdem verwendet die Prozedur die Remove-Methode der Collection, um den Eintrag mit dem als Parameter &uuml;bergebenen Key-Wert aus der Collection zu entfernen und die Formularinstanz damit zu zerst&ouml;ren (s. Quellcode 5).<\/p>\n<p>Und dann w&auml;re da noch die Fehlerbehandlung: Diese sorgt daf&uuml;r, dass Fehler, die durch den Versuch, ein nicht vorhandenes Formular zu l&ouml;schen, entstehen, sich nicht bemerkbar machen.<\/p>\n<h3>Hinweis<\/h3>\n<p>Wer auf Details achtet, hat bemerkt, dass die Prozedur ArtikelAusblenden als &#8222;Public&#8220; deklariert ist. Im n&auml;chsten Kapitel folgt die Erl&auml;uterung dieser ungew&ouml;hnlichen Ma&szlig;nahme. <\/p>\n<p>Das Schlie&szlig;en aller Formularinstanzen erledigen Sie mit der Schaltfl&auml;che cmdAlleSchliessen. Der Vorgang ist einfacher als erwartet, wie auch die L&auml;nge der entsprechenden Ereignisprozedur aus Quellcode 5 andeutet. Man muss lediglich die Collection zerst&ouml;ren, um auch die darin enthaltenen Formularinstanzen zu schlie&szlig;en.<\/p>\n<pre>Private Sub cmdAlleSchliessen_Click()\r\n    Set colFrmArtikel = Nothing\r\nEnd Sub<\/pre>\n<p><b>Quellcode 5<\/b><\/p>\n<p>Der oben genannte Weg, die Formularinstanzen f&uuml;r die verschiedenen Artikel auch von dem Formular aus wieder zu schlie&szlig;en, von dem diese aufgerufen wurden, ist wirklich sehr unergonomisch. Die Schaltfl&auml;che zum Schlie&szlig;en aller ge&ouml;ffneten Instanzen des Artikel-Formulars ist sicher hilfreich, wenn der Benutzer keine weiteren Detailinformationen mehr zu den Artikeln ben&ouml;tigt, aber ansonsten wird dieser die Formulare wohl auf herk&ouml;mmlichem Wege wieder schlie&szlig;en wollen.<\/p>\n<p>Daraus ergibt sich aber ein kleines Problem: Wenn der Benutzer das Formular &uuml;ber die Schlie&szlig;en-Schaltfl&auml;che schlie&szlig;t, wird der zugeh&ouml;rige Eintrag aus der Collection nicht entfernt. Das bedeutet, dass bereits die n&auml;chste Aktion, egal ob es sich um das Anlegen oder das Entfernen einer Formularinstanz handelt, zu einem Fehler f&uuml;hren kann. Deshalb m&uuml;ssen Sie daf&uuml;r sorgen, dass die betroffene Formularinstanz beim Schlie&szlig;en eine Prozedur ausl&ouml;st, die auch den entsprechenden Eintrag aus der Collection entfernt. Dazu w&auml;hlen Sie am besten das Ereignis Beim Schlie&szlig;en und legen daf&uuml;r die Prozedur aus Quellcode 6 an.<\/p>\n<p>Die Prozedur &uuml;berpr&uuml;ft zun&auml;chst, ob die Tag-Eigenschaft dieser Formularinstanz einen Wert hat. Wenn nicht, l&ouml;scht sie den Eintrag, indem sie die Prozedur ArtikelAusblenden des Formulars frmArtikelUebersicht aufruft und den Inhalt der Tag-Eigenschaft als Parameter &uuml;bergibt &#8211; damit wissen Sie nun auch, warum diese Prozedur als &ouml;ffentlich deklariert wurde.<\/p>\n<pre>Private Sub Form_Close()\r\n    If Not Nz(Me.Tag, \"\") = \"\" Then\r\n        Forms!frmArtikeluebersicht. _            ArtikelAusblenden (Me.Tag)\r\n    End If\r\nEnd Sub<\/pre>\n<p><b>Quellcode 6<\/b><\/p>\n<h3>Hinweis<\/h3>\n<p>M&ouml;glicherweise beklagen Sie nun, dass man ja alle Prozeduren des Klassenmoduls des Formulars frmArtikeluebersicht als &ouml;ffentliche Prozeduren in einem Standardmodul h&auml;tte speichern k&ouml;nnen. Da die Prozeduren aber so sehr mit dem Formular zusammenh&auml;ngen, hat der Autor sich f&uuml;r die hier gew&auml;hlte Variante entschieden. <\/p>\n<p>Und an dieser Stelle erfahren Sie auch, warum die Prozedur ArtikelAusblenden den Wert der Tag-Eigenschaft der zu entfernenden Instanz auf eine leere Zeichenkette setzt: Wenn Sie eine Formularinstanz vom Formular frmArtikelUebersicht aus l&ouml;schen, indem Sie einfach die Instanz aus der Collection entfernen, l&ouml;sen Sie ja ebenfalls die Ereigniseigenschaft Beim Schlie&szlig;en der Formularinstanz aus. Und da diese wiederum erneut die Prozedur ArtikelAusblenden aufruft, w&uuml;rde diese im zweiten Anlauf einen Fehler ausl&ouml;sen.<\/p>\n<p>Mit der hier vorgestellten Vorgehensweise k&ouml;nnen Sie f&uuml;r herk&ouml;mmliche Zwecke ausreichend Formularinstanzen &ouml;ffnen.<\/p>\n<p>Dabei spielt das Collection-Objekt eine herausragende Rolle, weil es als Container f&uuml;r die einzelnen Formularinstanzen dient.<\/p>\n<li>Mit wenig Aufwand lie&szlig;e sich eine komplett parametrisierte Klasse herstellen, die zur Verwaltung von Formularinstanzen auf Basis verschiedener Datenherk&uuml;nfte dient.<\/li>\n","protected":false},"excerpt":{"rendered":"<p>In den meisten F&auml;llen reicht eine Instanz eines Formulars zum Darstellen der gew&uuml;nschten Daten aus. Selbst wenn man einmal zwei oder mehr Datens&auml;tze vergleichen m&ouml;chte, kann man diese in Listenform untereinander anzeigen. Wenn die betreffenden Datens&auml;tze allerdings einmal mehr Felder enthalten, als nebeneinander angezeigt werden k&ouml;nnen, kommt schnell der Wunsch nach der Verwendung mehrerer Instanzen eines Formulars mit unterschiedlichen Datens&auml;tzen auf. Wie Sie das realisieren, erfahren Sie im vorliegenden Beitrag.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[66022005,662005,44000023],"tags":[],"class_list":["post-55000270","post","type-post","status-publish","format-standard","hentry","category-66022005","category-662005","category-Mit_Formularen_arbeiten"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Formular mehrfach anzeigen - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Formular_mehrfach_anzeigen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Formular mehrfach anzeigen\" \/>\n<meta property=\"og:description\" content=\"In den meisten F&auml;llen reicht eine Instanz eines Formulars zum Darstellen der gew&uuml;nschten Daten aus. Selbst wenn man einmal zwei oder mehr Datens&auml;tze vergleichen m&ouml;chte, kann man diese in Listenform untereinander anzeigen. Wenn die betreffenden Datens&auml;tze allerdings einmal mehr Felder enthalten, als nebeneinander angezeigt werden k&ouml;nnen, kommt schnell der Wunsch nach der Verwendung mehrerer Instanzen eines Formulars mit unterschiedlichen Datens&auml;tzen auf. Wie Sie das realisieren, erfahren Sie im vorliegenden Beitrag.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Formular_mehrfach_anzeigen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-06T15:17:57+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg05.met.vgwort.de\/na\/20d48971a1764d7599ec3b04e8e9db48\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"13\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Formular_mehrfach_anzeigen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Formular_mehrfach_anzeigen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Formular mehrfach anzeigen\",\"datePublished\":\"2020-05-06T15:17:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Formular_mehrfach_anzeigen\\\/\"},\"wordCount\":2366,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Formular_mehrfach_anzeigen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/20d48971a1764d7599ec3b04e8e9db48\",\"articleSection\":[\"2\\\/2005\",\"2005\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Formular_mehrfach_anzeigen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Formular_mehrfach_anzeigen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Formular_mehrfach_anzeigen\\\/\",\"name\":\"Formular mehrfach anzeigen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Formular_mehrfach_anzeigen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Formular_mehrfach_anzeigen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/20d48971a1764d7599ec3b04e8e9db48\",\"datePublished\":\"2020-05-06T15:17:57+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Formular_mehrfach_anzeigen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Formular_mehrfach_anzeigen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Formular_mehrfach_anzeigen\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/20d48971a1764d7599ec3b04e8e9db48\",\"contentUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/20d48971a1764d7599ec3b04e8e9db48\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Formular_mehrfach_anzeigen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Formular mehrfach anzeigen\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Formular mehrfach anzeigen - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Formular_mehrfach_anzeigen\/","og_locale":"de_DE","og_type":"article","og_title":"Formular mehrfach anzeigen","og_description":"In den meisten F&auml;llen reicht eine Instanz eines Formulars zum Darstellen der gew&uuml;nschten Daten aus. Selbst wenn man einmal zwei oder mehr Datens&auml;tze vergleichen m&ouml;chte, kann man diese in Listenform untereinander anzeigen. Wenn die betreffenden Datens&auml;tze allerdings einmal mehr Felder enthalten, als nebeneinander angezeigt werden k&ouml;nnen, kommt schnell der Wunsch nach der Verwendung mehrerer Instanzen eines Formulars mit unterschiedlichen Datens&auml;tzen auf. Wie Sie das realisieren, erfahren Sie im vorliegenden Beitrag.","og_url":"https:\/\/access-im-unternehmen.de\/Formular_mehrfach_anzeigen\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-06T15:17:57+00:00","og_image":[{"url":"http:\/\/vg05.met.vgwort.de\/na\/20d48971a1764d7599ec3b04e8e9db48","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"13\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Formular_mehrfach_anzeigen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Formular_mehrfach_anzeigen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Formular mehrfach anzeigen","datePublished":"2020-05-06T15:17:57+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Formular_mehrfach_anzeigen\/"},"wordCount":2366,"commentCount":2,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Formular_mehrfach_anzeigen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/20d48971a1764d7599ec3b04e8e9db48","articleSection":["2\/2005","2005","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Formular_mehrfach_anzeigen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Formular_mehrfach_anzeigen\/","url":"https:\/\/access-im-unternehmen.de\/Formular_mehrfach_anzeigen\/","name":"Formular mehrfach anzeigen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Formular_mehrfach_anzeigen\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Formular_mehrfach_anzeigen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/20d48971a1764d7599ec3b04e8e9db48","datePublished":"2020-05-06T15:17:57+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Formular_mehrfach_anzeigen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Formular_mehrfach_anzeigen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Formular_mehrfach_anzeigen\/#primaryimage","url":"http:\/\/vg05.met.vgwort.de\/na\/20d48971a1764d7599ec3b04e8e9db48","contentUrl":"http:\/\/vg05.met.vgwort.de\/na\/20d48971a1764d7599ec3b04e8e9db48"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Formular_mehrfach_anzeigen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Formular mehrfach anzeigen"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000270","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55000270"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000270\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000270"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000270"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000270"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}