Code voor groep van controls: group en tag

Controls op het scherm (en sommige andere objecten) hebben een “tag” eigenschap, die je zelf kan gebruiken naar eigen goeddunken. Een aantal controls in een container of group kunnen herkend worden aan de waarde van de tag property. Zo kan je alle “child” objecten van een container doorlopen tot je de gewenset “tag” inhoud vindt. Dat kan zowel een string als een getal of eender welke ” variant” zijn. Ps: Een timer heeft geen “tag”, een Form wel.

Bij een Form kan je de tag gebruiken om een toestand bij te houden, bv add/edit/saved mode.

Wil je dezelfde “event handlers” gebruiken voor een aantal controls, dan kan je ze in een group opnemen. In de eigenschappen staat de group bovenaan, onder de control (Class) en (Name): (Group).

Stel dat je 12 knoppen op je scherm hebt, die je allemaal als Group “grpKnoppen” hebt gegeven. Dan kan je:

PUBLIC SUB grpKnoppen_Click()
  
  Message.Info("Knop geklikt: " & LAST.Name)
  
END

Je kan verschillende objecten in dezelfde groep steken, en dan kan je voor alle de Tag eigenschap (of Name, Text, …) gebruiken.
Maar je moet er wel op letten dat de eigenschap die je aanspreekt bestaat (desnoods op object type controleren in je code).
bv grpObjecten:

PUBLIC SUB grpObjecten_Click()
  
  Message.Info(LAST.Name & "; " & LAST.Text & "; Tag:" & LAST.Tag)
  
END

In de Tag kan je een verwijzing bewaren, bv

  • index van een Array met andere waarden
  • record id van een record uit een database (via result set bv)

Je kan ook gebruik maken van een container waarin de objecten zitten (bv Frame1 dat Buttons bevat), en die je kan aflopen als “enumerated type”:
Als je een ListBox1 op je Form hebt kan je zo de objecten oplijsten:

PUBLIC SUB showAllChildren()
  
  DIM hObject AS Object
  
  FOR EACH hObject IN Frame1.Children
    ListBox1.Add(hObject.Name & ": " & hObject.Tag, 0)
  NEXT 
  
END
This entry was posted in Gambas2, Hoe - in Gambas. Bookmark the permalink.