German [B4J] Zugriff auf Objekte aus den Designer Layouts

RWK

Member
Licensed User
Hallo zusammen,

ich habe noch extremste Veständnisschwierigkeiten um mit den Felder aus dem VisualDesigner zu arbeiten.

B4X:
'FrmStamm
'Static code module

Sub Process_Globals
    Private fx As JFX
    Private Stamm As Form
    Private accStamm As Accordion
    'Private txtSch As TextField
    'Private mSQL As SQL
    'Private mDBPath As String       
End Sub

Public Sub Show (Basis As String)
    Stamm.Initialize("Stamm",1280,800)
        Select Case Basis
            Case "SchuelerStamm"
                Stamm.RootPane.LoadLayout("Stamm")
                accStamm.LoadLayout("frmAccStamm01","Schueler Daten")
                accStamm.LoadLayout("frmAccStamm02","Faecher Daten")
                accStamm.LoadLayout("frmAccStamm03","Debitoren Daten")
                accStamm.LoadLayout("frmAccStamm04","LaLa Daten")
            Case "LehrerStamm"
                '
        End Select   
    Stamm.Show
End Sub

Sub btnClose_Click
    Stamm.close
End Sub


Sub txtSch_Action
    Dim mtxt As TextField = Sender   
    Dim mText As String = mtxt.Text 'frmAccStamm01.txtSch(Index).text   FeldName: frmAccStamm01.Textfield1.text
    Dim mIdx As String    = mtxt.Id
    
    Log("Index:" & mIdx & " - mtxt-Tag:" & mtxt.tag & ":" & mText) ' Tag 01 - ok Index - leer
    
    'hier hätte ich jetzt gerne: txtSch.Id(mIdx+1).RequestFocus
    'also: frmAccStamm01.txtSch(txtSch.tag("2")).RequestFocus       sozusagen
    'oder: frmAccStamm01.Textfield2.RequestFocus                    wäre der Feldname
End Sub

Im Designer habe ich eine Form erstellt (Stamm) in der ein Accordion eingebettet ist;
dann 4 Forms erstellt die in das Accordion rein sollen;
in den Forms sind aktuell nur Textfelder (z.b. Name: TextField1 - Textfield20)
die Textfelder je frm haben eine einzige Ereignisprozedur erhalten und jeweils einen Tag zur Unterscheidung
soweit so gut

Wie komme ich jetzt im Code an diese Felder heran?
In einem von Erels Videos hat er beschrieben das man im Tag ein Objekt übergeben sollte; dann müsste ich sowas bauen wie
B4X:
Type mTextField
    Tag as string
    fLast as Textfield '?
    fNext as Textfield '?
end Type
?

Nebenbei.... der Index in meiner Sub txtSch_Action ist leer....was sollte denn da eigentlich ankommen...ich hätte gedacht das wäre ne laufende Nr.... ist aber String....und leer.

Grüße und Danke
Rainer
 

klaus

Expert
Licensed User
Longtime User
Es wäre einfacher für uns Dir zu helfen wenn Du ein kleines Projekt, als zip Datei, posten würdest welches das Problem zeigt.
Im IDE Menü:
upload_2018-2-15_10-49-48.png
 

RWK

Member
Licensed User
Anbei ein Projekt, was mein obiges Problem darstellen soll.

Es geht mir darum, die Objekte in der Form ansprechen zu können, sprich Focus setzen, Text festlegen, Button ein/ausblenden, etc.


Grüße
Rainer
 

Attachments

  • FormTest.zip
    9.8 KB · Views: 229

MarkusR

Well-Known Member
Licensed User
Longtime User
das holt sich zur textbox das übergeordnete und geht dann wieder alle unterobjekte durch
B4X:
    Dim List1 As Pane
    List1 = mtxt.Parent

    For Each obj In List1
        If obj Is TextField Then
            mtxt = obj
            Log(mtxt.Text)
        End If
    Next

warum die id nicht geht , keine ahnung
hier der murks über tag, focus ein weiter. könntest du eine function / sub draus machen.
B4X:
    Dim List1 As Pane
    List1 = mtxt.Parent

    Dim NextTag As Int = mtxt.Tag+1
   
    For Each obj In List1
        If obj Is TextField Then  
            mtxt = obj
            If "" & mtxt.Tag = NextTag Then
                mtxt.RequestFocus
            End If
            Log(mtxt.Text)
        End If
    Next
 
Last edited:
Top