Objekt wie Listbox, aber "intern"?

Gibt es eigentlich ein fertiges Objekt in Xojo, das man wie eine Listbox zum mehrspaltigen Ablegen und Auslesen benutzen kann, wie die DesktopListbox? Nur halt ohne, dass es in der GUI erscheint?

Mir ist klar, dass man sowas auf Basis eines Array oder Dictionary selber “ausprogrammieren” kann, aber quasi “fertig” wäre auch nicht schlecht …

Ich habe einfach mal ausprobiert, eine DesktopListbox per Constructor zu erstellen, das geht auch ohne Fehlermeldung. Man kann Daten mit “addrow” hinzufügen, aber beim Lesen mit CellTextAt kommt nix zurück …

Nimm doch eine 2D Array dafür.
Dann hast du Reihen und Spalten.

Ich verwende für so etwas eine Klasse. Z.b. für eine Kundenliste erstellt du eine Klasse mit den Namen Customer. Darin erstellt du Properties für die Felder die du benötigst. Z.B. Firstname, Lastame, City als Type String.

Im Code kannst du das dann so befüllen:

Var c As New Customer

c.Firstname = "Max"
c.Lastname = "Mustermann"
c.City = "Berlin"

Wenn du es mehrzeilig brauchst:

var customers() As Customer
customers.Add(c)

Du kannst die Daten so auch ganz einfach wieder auslesen. Listboxen befüllen oder in eine SQL-Datenbank schreiben.

Z.b. Listbox füllen:

For Each cust As Customer in Customers
  ListBox1.AddRow(cust.Firstname, cust.Lastname, cust.City)
Next
1 Like

Ja, ein zweidimensionales Array wäre genau das, was Du beschreibst. Wenn Du die Zellen nicht über einen Index, sondern über benannte Zeilen und Spalten ansprechen willst, könntest Du auch ein Dictionary mit Dictionaries als Elementen verwenden. Oder ein Array von Dictionaries, um numerische Indizes in der einen Dimension mit Namen in der anderen zu kombinieren.

Ok, ich hab jetzt mal eine Klasse zusammengebaut, die (für mich) alle wichtigen Funktionen analog zu einer Listbox enthält. Für die Zeilen (bestehend aus x Columns) habe ich je einen String mit Trennzeichen benutzt. Vielleicht fildet sich ja jemand, der Lust und Zeit hat, das auf ein höheres Niveau bei gleicher Funktionalität zu heben und das Ganze weiter gegen Exceptions zu härten …

DataBox.xojo_binary_code.zip (1.8 KB)

Ich kann Dein Projekt nicht öffnen (Xojo – die aktuelle Version – scheitert ohne Fehlermeldung), aber ist es nicht ziemlich ineffizient, die Zeilen als Strings zu speichern? Du musst dann ja immer einen String zerlegen, um an einzelne Zellen heranzukommen, und ihn wieder neu zusammensetzen, um etwas zu ändern. Ein Array wäre weit effizienter und Du könntest die Zellen über die Indizes von Zeile und Spalte direkt ansprechen.

Der Code ist eine Klasse und kein Projekt. Neues Projekt und Klasse rein.

@frank_esselbach : Hast Du schon mal mit Codex gearbeitet?

Da hast du sicher recht, aber ich stehe etwas unter Zeitdruck. Ich habe aus dem Stand die Idee “Array im Array” nicht hinbekomen, obvwohl es die zweiffellos gibt. Wenn du kannst und willst, mach mal bitte. :slight_smile: