German [B4J] Zugriff auf Objekte aus den Designer Layouts

Discussion in 'German Forum' started by RWK, Feb 15, 2018.

  1. RWK

    RWK Member Licensed User

    Hallo zusammen,

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

    Code:
    '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
    Code:
    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
     
  2. klaus

    klaus Expert Licensed 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
     
  3. RWK

    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
     

    Attached Files:

  4. MarkusR

    MarkusR Well-Known Member Licensed User

    das holt sich zur textbox das übergeordnete und geht dann wieder alle unterobjekte durch
    Code:
    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.
    Code:
    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: Feb 15, 2018
  5. klaus

    klaus Expert Licensed User

    Ich würde es mit Arrays machen.

    Beiliegend ein geändertes Projekt.
     

    Attached Files:

Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice