Seite 1 von 1

XbpCombobox Item anzeigen

Verfasst: Di, 26. Sep 2017 10:54
von vorti
Hallo,

kann mir jemand sagen warum mir mein zuletzt ausgewähltes Item nicht angezeigt wird in der Combobox.

Code: Alles auswählen

oTest:= XbpCombobox():new( drawingArea, , {215, 40}, {85,70}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } )
oTest:tabstop := .T.
oTest:type := XBPCOMBO_DROPDOWNLIST
oTest:create()
oTest:addItem ("Test1")
oTest:addItem ("Test2")
oTest:addItem ("Test3")
oTest:setData( { nPos } )

was evtl. noch wichtig ist. Ich übergebe am Ende nicht die komplette Zeichenkette in die Datenbank sondern nur ein Zeichen.

Re: XbpCombobox Item anzeigen

Verfasst: Di, 26. Sep 2017 11:03
von georg
Hallo, vorti -


tja, was steht in nPos drin? Wenn das die Position des letzten, ausgewählten Elementes ist, dann sollte das korrekt sein.

Die XbpComboBox() setzt sich aus einem XbpSLE() und einer XbpListBox() zusammen. Wenn Du einen Eintrag in das Textfeld setzen willst, verwendest Du die Methode des XbpSLE(), also oTest:XbpSLE:setData().

Laut Dokumentation kommt die XbpListBox()-Klasse zuerst in der Ableitung, daher greift :setData() bzw. :getData() auf die entsprechenden Methoden der XbpListBox() zurück.

Du kannst es ja auch mal mit oTest:XbpListBox:setData(nPos) versuchen.

Was wird denn angezeigt, wenn die XbpComboBox() angezeigt wird? Und, was steht in nPos drin?

Re: XbpCombobox Item anzeigen

Verfasst: Di, 26. Sep 2017 11:39
von vorti
Ich benutze nPos für die Übergabe an die Datenbank, was ja auch funktioniert.

Code: Alles auswählen

nPos:= oTest:getData()[1]
if  nPos = NIL .or. nPos = 1
   replace x   with  "T1"
elseif   nPos = 2
   replace x   with T2"
elseif   nPos = 3
   replace x   with "T3"
endif
Wenn ich am Anfang den Wert von x an eine Variable übergebe, diese anpasse und mit XpbSLE ausgebe, funktioniert es auch.

Code: Alles auswählen

do case
case x = "T1"
      cx := "Test1"
case x = "T2"
      cx := "Test2"
case x = "T3"
      cx:= "Test3"
endcase
Das heißt, wenn ich z.B. Test2 ausgewählt + bestätigt habe, bekomme ich bei erneuten Aufruf im XpbSLE auch Test2 angezeigt, in der Combobox allerdings nur ein leeres Feld (irgendwie übereinander kann man die nicht legen, oder?).

Ich bin im übrigen eher Anfänger, also wenn es allgemein ein besseren Lösungsvorschlag gibt, würde ich den auch nehmen.

Re: XbpCombobox Item anzeigen

Verfasst: Di, 26. Sep 2017 12:27
von georg
Hallo, vorti


wir haben alle mal angefangen.

Die XbpComboBox() ist quasi eine Sammlung von zwei Xbase-Parts. Wenn ein Eintrag in der XbpListBox() markiert werden soll, dann muss Du dort einen numerischen Wert übergeben (den vermisse ich in Deinem Beispiel).

oTest:XbpSLE:setData("Zeichenstring") ==> setzt den Inhalt im Zeicheneingabefeld
oTest:XbpListBox:setData(3) ODER oTest:setData(3) ==> setzt den Inhalt in der Listbox

Re: XbpCombobox Item anzeigen

Verfasst: Di, 26. Sep 2017 13:54
von vorti
Vielen Dank, ich habe es jetzt so gelöst.

oTest:setData( { nPos } )
oTest::XbpListBox:setData( nPos2 )

und "nPos2" dann je nach dem auf 1,2 oder 3 gesetzt.