User Tools

Site Tools


k7:k7.2:k7.2.1:start

7.2.1 Structures - Struct

The following lines describe the syntax for declaring a structure:

PUBLIC STRUCT Identifier
  Field_1 [ Embedded array declaration ] AS [ Datatype ]
  Field_2 [ Embedded array declaration ] AS [ Datatype ]
  ...
  Field_n [ Embedded array declaration ] AS [ Datatype ]
END STRUCT

7.2.1.1.1 Declaration Struct

This declaration defines the structure of students with 5 fields:

Public Struct Schueler
  Jahrgangsstufe As Integer
  GebDatum As Date
  Nachname As String
  DG1Kurs As String
  DG2Kurs As String
End Struct

Note that when declaring a structure as an access right, you can only set Public. The fields from Year to DG2Course are variables with the Public access right.

7.2.1.2 Arrays of structures

The special feature of the following declaration of a structure course is that in the structure student the field course list[8] is an array with elements of type Struct from the course declaration:

Public Struct Kurs 
  KursFach As String
  Kurslehrer As String
End Struct
 
Public Struct Schueler
  Jahrgangsstufe As Integer
  GebDatum As Date
  Nachname As String
  KursListe[8] As Struct Kurs
End Struct

Arrays with elements of the type Struct are not real arrays, because they have very few methods of the original array class:

  • The elements can be accessed via an index.
  • It can be iterated over all elements (list). Information about the length of the array and the array dimensions can be queried.

You can then declare variables of the user-defined (pseudo-)type Struct. First a variable course participant of type Struct and then an array course list[22], in which the relevant data of 22 students are stored and whose elements are of type Struct:

Public KursTeilnehmer As Struct Schueler
Public Schueler As New Schueler ' Das funktioniert alternativ auch ...
Public KursListe[22] As Struct Schueler
Public KursListe[22] As New Schueler ' → Fehlermeldung 

7.2.1.3 Accessing Structures and their Fields

After you have declared structures, you will learn how to access the structure declared in the previous section and its fields read and write using variables of type Struct. The following program interface is used to enter the values of the individual fields and their display:

Oberfläche

Figure 7.2.1.3.1: Program interface

First, access to the input mask is released. Then all 5 fields of the variable course participants of type Struct (student) are assigned values or the default values are overwritten and the current content of the variable course participants is inserted into the array course list[22].

Public Sub SaveNewRecord()  
  KursTeilnehmer.Jahrgangsstufe = cmbJGS.Text
  KursTeilnehmer.Nachname = txbNachname.Text
  KursTeilnehmer.GebDatum = dbGebDatum.Value
  KursTeilnehmer.DG1Kurs = cmbDGF1.Text
  KursTeilnehmer.DG2Kurs = cmbDGF2.Text
' Neuen Record im Array Kursliste[] speichern
  KursListe[iRecordNumber] = KursTeilnehmer
End ' SaveNewRecord()  

Alternatively, you can use the With statement to write simplified assignments. The source code is easier to read:

Public Sub SaveNewRecord()  
 
  With KursTeilnehmer
      .Jahrgangsstufe = cmbJGS.Text
      .Nachname = txbNachname.Text
      .GebDatum = dbGebDatum.Value
      .DG1Kurs = cmbDGF1.Text
      .DG2Kurs = cmbDGF2.Text
  End With    
  KursListe[iRecordNumber] = KursTeilnehmer
End ' SaveNewRecord()  

A compact alternative is recommended if you immediately insert the contents of a record in the price list array[22]:

Public Sub SaveNewRecord() 
  KursListe[iRecordNumber].Jahrgangsstufe = cmbJGS.Text
  KursListe[iRecordNumber].Nachname = txbNachname.Text
  KursListe[iRecordNumber].GebDatum = dbGebDatum.Value
  KursListe[iRecordNumber].DG1Kurs = cmbDGF1.Text
  KursListe[iRecordNumber].DG2Kurs = cmbDGF2.Text
End ' SaveNewRecord()  

The following two procedures demonstrate how to read access the contents of the individual fields of a structure:

Public Sub ShowCurrentRecord()
  cmbJGS.Text = KursListe[iCurrentRecord].Jahrgangsstufe
  txbNachname.Text = KursListe[iCurrentRecord].Nachname
  dbGebDatum.Value = KursListe[iCurrentRecord].GebDatum
  cmbDGF1.Text = KursListe[iCurrentRecord].DG1Kurs
  cmbDGF2.Text = KursListe[iCurrentRecord].DG2Kurs
End ' ShowCurrentRecord()
Public Sub ShowRecords()
  Dim iCount As Integer
 
  TextArea1.Clear
  For iCount = 0 To iRecordNumber
    TextArea1.Insert(KursListe[iCount].Jahrgangsstufe & gb.NewLine)
    TextArea1.Insert(KursListe[iCount].Nachname & gb.NewLine)
    TextArea1.Insert(Format(KursListe[iCount].GebDatum, "dddd - dd. mmmm yyyy") & gb.NewLine)
    TextArea1.Insert(KursListe[iCount].DG1Kurs & gb.NewLine)
    TextArea1.Insert(KursListe[iCount].DG2Kurs & gb.NewLine)
    If iCount < iRecordNumber Then TextArea1.Insert("-------------------------" & gb.NewLine)
  Next ' iCount  
  TextArea1.Pos = Len(TextArea1.Text) ' ---> Sprung in die letzte Zeile
 
End ' ShowRecords()

7.2.1.4 Download

7.2.1 Strukturen – Struct

Die folgenden Zeilen beschreiben die Syntax für die Deklaration einer Struktur:

PUBLIC STRUCT Identifier
  Field_1 [ Embedded array declaration ] AS [ Datatype ]
  Field_2 [ Embedded array declaration ] AS [ Datatype ]
  ...
  Field_n [ Embedded array declaration ] AS [ Datatype ]
END STRUCT

7.2.1.1 Deklaration Struct

Diese Deklaration definiert die Struktur Schueler mit 5 Feldern:

Public Struct Schueler
  Jahrgangsstufe As Integer
  GebDatum As Date
  Nachname As String
  DG1Kurs As String
  DG2Kurs As String
End Struct

Beachten Sie, dass Sie bei der Deklaration einer Struktur als Zugriffsrecht nur Public setzen können. Die Felder von Jahrgangsstufe bis DG2Kurs sind p.d. Variablen mit dem Zugriffsrecht Public.

7.2.1.2 Arrays von Strukturen

Die Besonderheit der folgenden Deklaration einer Struktur Kurs besteht darin, das in der Struktur Schueler das Feld Kursliste[8] ein Array mit Elementen vom Typ Struct aus der Kurs-Deklaration ist:

Public Struct Kurs 
  KursFach As String
  Kurslehrer As String
End Struct
 
Public Struct Schueler
  Jahrgangsstufe As Integer
  GebDatum As Date
  Nachname As String
  KursListe[8] As Struct Kurs
End Struct

Arrays mit Elementen vom Typ Struct sind keine echten Arrays, denn sie verfügen nur über sehr wenige Methoden der originalen Array-Klasse:

  • Auf die Elemente kann über einen Index zugegriffen werden.
  • Es kann über alle Elemente iteriert werden (Aufzählung).
  • Informationen über die Länge des Arrays und die Array-Dimensionen kann man abfragen.

Anschließend können Sie Variablen vom benutzerdefinierten (Pseudo-)Typ Struct deklarieren. Zuerst eine Variable KursTeilnehmer vom Typ Struct und anschließend ein Array Kursliste[22], in dem die relevanten Daten von 22 Schülern gespeichert werden und dessen Elemente vom Typ Struct sind:

Public KursTeilnehmer As Struct Schueler
Public Schueler As New Schueler ' Das funktioniert alternativ auch ...
Public KursListe[22] As Struct Schueler
Public KursListe[22] As New Schueler ' → Fehlermeldung 

7.2.1.3 Zugriff auf Strukturen und deren Felder

Nach der Deklaration von Strukturen erfahren Sie, wie man auf die im vorangegangenen Abschnitt deklarierte Struktur und deren Felder lesend und schreibend über Variablen vom Typ Struct zugreift. Für die Eingabe der Werte der einzelnen Felder und deren Anzeige wird die folgende Programmoberfläche genutzt:

Oberfläche

Abbildung 7.2.1.3.1: Programmoberfläche

Zuerst wird der Zugriff auf die Eingabemaske freigegeben. Dann werden allen 5 Feldern der Variablen KursTeilnehmer vom Typ Struct (Schueler) Werte zugewiesen oder die Vorgabewerte überschrieben. Abschließend wird der aktuelle Inhalt der Variablen KursTeilnehmer in das Array Kursliste[22] eingefügt.

Public Sub SaveNewRecord()  
  KursTeilnehmer.Jahrgangsstufe = cmbJGS.Text
  KursTeilnehmer.Nachname = txbNachname.Text
  KursTeilnehmer.GebDatum = dbGebDatum.Value
  KursTeilnehmer.DG1Kurs = cmbDGF1.Text
  KursTeilnehmer.DG2Kurs = cmbDGF2.Text
' Neuen Record im Array Kursliste[] speichern
  KursListe[iRecordNumber] = KursTeilnehmer
End ' SaveNewRecord()  

Mit Hilfe der With-Anweisung können alternativ die Zuweisungen vereinfacht geschrieben werden. Der Quelltext ist besser lesbar:

Public Sub SaveNewRecord()  
 
  With KursTeilnehmer
      .Jahrgangsstufe = cmbJGS.Text
      .Nachname = txbNachname.Text
      .GebDatum = dbGebDatum.Value
      .DG1Kurs = cmbDGF1.Text
      .DG2Kurs = cmbDGF2.Text
  End With    
  KursListe[iRecordNumber] = KursTeilnehmer
End ' SaveNewRecord()  

Eine kompakte Alternative bietet sich an, wenn Sie den Inhalt eines Records sofort in die das Array Kursliste[22] einfügen:

Public Sub SaveNewRecord() 
  KursListe[iRecordNumber].Jahrgangsstufe = cmbJGS.Text
  KursListe[iRecordNumber].Nachname = txbNachname.Text
  KursListe[iRecordNumber].GebDatum = dbGebDatum.Value
  KursListe[iRecordNumber].DG1Kurs = cmbDGF1.Text
  KursListe[iRecordNumber].DG2Kurs = cmbDGF2.Text
End ' SaveNewRecord()  

Die folgenden zwei Prozeduren demonstrieren, wie man auf die Inhalte der einzelnen Felder einer Struktur lesend zugreift:

Public Sub ShowCurrentRecord()
  cmbJGS.Text = KursListe[iCurrentRecord].Jahrgangsstufe
  txbNachname.Text = KursListe[iCurrentRecord].Nachname
  dbGebDatum.Value = KursListe[iCurrentRecord].GebDatum
  cmbDGF1.Text = KursListe[iCurrentRecord].DG1Kurs
  cmbDGF2.Text = KursListe[iCurrentRecord].DG2Kurs
End ' ShowCurrentRecord()
Public Sub ShowRecords()
  Dim iCount As Integer
 
  TextArea1.Clear
  For iCount = 0 To iRecordNumber
    TextArea1.Insert(KursListe[iCount].Jahrgangsstufe & gb.NewLine)
    TextArea1.Insert(KursListe[iCount].Nachname & gb.NewLine)
    TextArea1.Insert(Format(KursListe[iCount].GebDatum, "dddd - dd. mmmm yyyy") & gb.NewLine)
    TextArea1.Insert(KursListe[iCount].DG1Kurs & gb.NewLine)
    TextArea1.Insert(KursListe[iCount].DG2Kurs & gb.NewLine)
    If iCount < iRecordNumber Then TextArea1.Insert("-------------------------" & gb.NewLine)
  Next ' iCount  
  TextArea1.Pos = Len(TextArea1.Text) ' ---> Sprung in die letzte Zeile
 
End ' ShowRecords()

7.2.1.4 Download

The website uses a temporary session cookie. This technically necessary cookie is deleted when the browser is closed. You can find information on cookies in our privacy policy.
k7/k7.2/k7.2.1/start.txt · Last modified: 02.07.2018 (external edit)

Page Tools