German Verwendung von Views in einer Klasse

Oliver05

New Member
Licensed User
Longtime User
Hallo zusammen,

ich versuche die objektorientierte Programmierung zu verstehen und versuche nun innerhalb des Klassenmoduls eine Sub zu programmieren, die auf eine View zugreift (Veränderung der Top Eigenschaft eines Labels). Ich erhalte jedoch die Meldung, dass die Variable nicht deklariert sei. Ich habe schon nach einem einfachen Bespiel Code gesucht aber nichts gefunden wo ich die Lösung selber ableiten konnte.

Vielen Dank im Voraus

Gruß
Oliver
 

Oliver05

New Member
Licensed User
Longtime User
Ich habe einfach mal das Beispiel aus dem 'Classes Tutorial' genommen und durchprobiert. Hat soweit alles geklappt. Dann wollte ich den Eigenschaften der Class (Name, Geburtsdatum) auch eine Fähigkeit hinzufügen (bewege dich). Dazu habe ich ein View (Label) mit dem Designer angelegt. Ich habe meinen Probiercode angehangen.
Ich hoffe damit wird klar was ich vorhabe bzw. zu verstehen versuche.
 

Attachments

  • Class_Test.zip
    455.1 KB · Views: 169

klaus

Expert
Licensed User
Longtime User
Du kannst Views, die nicht in der Class defiert wurden, nicht direkt aufrufen.
Du musst die View in der Routine übergeben.
Zu Deinem Beispiel:
Im Main Modul:
B4X:
Sub cmd_Start_Click
    TorbensAlter = Torben.CurrentAge
    Torben.Move(Label1, 300)
End Sub
Und in der Class:
B4X:
Public Sub Move(v As View, Distance As Int)
    Dim x As Int

    For x = 1 To Distance
        v.Top = v.Top + 1
    Next
End Sub


Seit B4A Version 2.70 kann man in Classes Properties benutzen:
Class:
B4X:
Public Sub getCurrentAge As Int
  Return GetAgeAt(DateTime.Now)
End Sub

Main:
B4X:
TorbensAlter = Torben.CurrentAge

Routinen die in der Class mit get oder set anfangen werden als Properties behandelt.

Hast Du dir schon mal das Kapitel 10 Class modules im User's Guide angeschaut ?

Beiliegend eine geänderte Version deines Programmes.
 

Attachments

  • Class_Test_1.zip
    7.5 KB · Views: 207
Last edited:

Oliver05

New Member
Licensed User
Longtime User
Vielen Dank für deine Hilfe und der Korrektur meines Beispiels.
Wie könnte ich das Label direkt in der Class definieren, so dass ich den Viewtyp nicht mit übergeben muss?
Es wäre super, wenn du auch das einmal in meinem kleinen Beispiel darstellen könntest.

Vielen Dank im Voraus
Gruß
Oliver
 

klaus

Expert
Licensed User
Longtime User
Beiliegend findest Du ein Beispiel mit einem bewegichen Label in einer Class.
Wenn Du obere Hälfte des Bildschirms berührst bewegt sich das Label nach oben und in der unteren Hälfte nach unten.
Das ist zwar keine realistische Funktion aber veranschaulicht das Prinzip.
Es sind einige Properties und ein Event inbegriffen.
 

Attachments

  • MovingLabel.zip
    7 KB · Views: 194
Top