none
Control Array in Access 2013

    Frage

  • Hallo Zusammen,

    ich versuche dynamisch Bezeichnungsfelder in einer form_load Prozedur zu erstellen:

    dim abc() as label

    ....

    redim abc(rc.recordcount)

    ...

    abc.(iCounter).Caption = rc.field(0)

    ...

    funktioniert leider nicht.

    Hat jemand ein paar Code Zeilen als Tip?

    Vielen Dank

    Joerg

    Montag, 15. April 2013 21:47

Alle Antworten

  • Hallo,
     
    Joerg Heier wrote:
     
    > ich versuche dynamisch Bezeichnungsfelder in einer form_load Prozedur zu erstellen:
    >
    > dim abc() as label
    > ....
    > redim abc(rc.recordcount)
    > ...
    > abc.(iCounter).Caption = rc.field(0)
    > ...
    >
    > funktioniert leider nicht.
     
    Klar, du versuchst, einen Array (Dim abc() As Label) wie eine Collection
    anzusprechen.
     
    Du kannst so vorgehen:
     
    Dim ctrLabel As Control
     
    For Each ctrLabel In Ne.Controls
      If ctrLabel.ControlType = 100 Then '100=acLabel
        'Mach was
      End If
    End If
     
    (Luftcode)
     
    Gruss - Peter
     
    --
     
    Montag, 15. April 2013 23:28
    Moderator
  • Hallo Peter,

    erst einmal vielen Dank für deine Antwort. Allerdings möchte ich die Anzahl der Labels per Code verändern - sprich ich will so viele Labels haben wie ich Datensätze habe.

    Dein Code geht ja "nur" durch alle in der Form existierenden Labels durch - oder habe ich da was falsch verstanden?

    Danke!

    Joerg

    Mittwoch, 17. April 2013 09:11
  • Hallo Jörg,

    auch wenn die Erinnerung schwindet...

    In Access laufen die Dinge anders als z. B. in .NET.
    Um ein Steuerelement zu erstellen, musst Du die CreateControl-Methode verwenden. Dazu muss das Formular im Design-Modus geöffnet sein - womit es beim Load Ereignis schon zu spät wäre.

    Wenn sich etwas in der Anzahl der Datensätze wiederholen soll, ist es vielfach einfacher, ein Endlosformular zu verwenden. Dann "managt" Access die Anzeige für Dich -  und es spart reichlich Steuerelemente, da Access eine Label recyceln kann.

    Oder - bei absehbarer Menge - die Labels vorzudefinieren und nur die sichtbar zu schalten, die gebraucht werden.

    Gruß Elmar

    Mittwoch, 17. April 2013 18:15
  • Hallo Elmar -

    Meinst Du meine Erinnerung? :-) Woher weißt Du das? Habe das letzte mal so vor ca. 15 Jahren mit Access programmiert...und war echt gut damals. Es ist erschreckend was noch von meinem Wissen diesbezüglich übrig geblieben ist.

    Damals hat man ein (glaube ich) ein Control im Designmodus kopiert und wieder eingefügt. Anschließend hatte man ein Array - also anstatt Bezeichnungsfeld1 und Bezeichnungsfeld2 - Bezeichnungsfeld(). Die konnte man dann per Code beliebig vervielfältigen. Aber genau das bekomme ich nicht mehr hin.

    Ein Endlosformular ist leider nicht das was ich mir vorstelle. Schließlich soll es eine grafische Darstellung der Datensätze sein die wiederum Projekte (Kategorien aus Outlook) repräsentieren. Die Reihenfolge und Größe der Labels definiere ich dynamisch anhand der Aufgaben je Projekt/Kategorie. Leider weiß ich im vorhinein nicht wie viele Projekte/Kategorien es gibt....

    Und irgendwie muss es doch möglich sein diese Controls zur Laufzeit zu definieren/vervielfältigen :-S *grummel*

    Grüße
    Joerg

    Mittwoch, 17. April 2013 19:58
  • Hallo Joerg,

    Joerg Heier schrieb folgendes:

    Meinst Du meine Erinnerung? :-) Woher weißt Du das? Habe das letzte mal so vor ca. 15 Jahren mit Access programmiert...und war echt gut damals. Es ist erschreckend was noch von meinem Wissen diesbezüglich übrig geblieben ist.

    Damals hat man ein (glaube ich) ein Control im Designmodus kopiert und wieder eingefügt. Anschließend hatte man ein Array - also anstatt Bezeichnungsfeld1 und Bezeichnungsfeld2 - Bezeichnungsfeld(). Die konnte man dann per Code beliebig vervielfältigen. Aber genau das bekomme ich nicht mehr hin.

    Das war VB (Classic) nicht Access ;-)

    Gruß
    Gunter


    Access FAQ: http://www.donkarl.com

          http://www.avenius.de - http://www.AccessRibbon.de
    http://www.ribboncreator.de - http://www.ribboncreator2010.de
                http://www.ribboncreator2013.de

    Mittwoch, 17. April 2013 20:25
    Moderator
  • Witzbold ;-)
    Mittwoch, 17. April 2013 21:33
  • Hallo Jörg,

    mit der Erinnerung war die meine von vor etwa 10 Jahren gemeint - als ehemaliger Access MVP, der sich aber mittlerweile dem SQL Server und .NET verschrieben hat.

    Control-Arrays gab es nur im "richtigen" Visual Basic 6 - auch bei .NET existieren sie nicht mehr.

    Access verwendet seit der Urversion aus Anfang der 90er ein eigenes ziemlich spezielles Formularmodell. Was zwar sehr effizient ist - und bei Windows 3.x/95 gab das auch Sinn - ist aber nicht sonderlich flexibel, was das Erweitern zur Laufzeit angeht. In späteren Versionen hat man zwar an der Optik gedreht, das interne Modell ist aber weitgehend unverändert.

    Das Erstellen oder Erweitern eines Formulars kann nur im Design Modus  passieren. Danach muss das Formular gespeichert werden in einer Datenansicht geöffnet werden.

    Will man den Aufwand vermeiden muss man die Labels vorher anlegen. Dabei sollte man durchlaufen benennen - etwas Label1, Label2 ... LabelNN.

    Ansonsten bleibt nur der Weg ActiveX Steuerelemente etc. einzubinden.

    Gruß Elmar

    Donnerstag, 18. April 2013 08:22
  • Danke Elmar - genau so habe ich es auch Implementiert. Leider habe ich dadurch eine Obergrenze an Projekten/Controls. Aber dann geht das halt nicht anders :-(

    Grüße aus Ingolstadt und einen sonnigen Tag :-)

    Joerg

    Donnerstag, 18. April 2013 09:37
  • Danke Elmar - genau so habe ich es auch Implementiert. Leider habe ich dadurch eine Obergrenze an Projekten/Controls.

    Obergrenze bei den letzten Versionen waren 895 Controls, siehe auch http://www.donkarl.com?FAQ1.4.

    Der übliche Weg ist in der Tat, die Controls anzulegen und bei Bedarf ein-/auszublenden. Ist auch wesentlich schneller.

    Gruss - Peter

    Freitag, 19. April 2013 22:31
    Moderator