xbpcombox
Moderator: Moderatoren
xbpcombox
Hallo
Ich bin eine Xbase++ und Programmier-Anfängerin. Nun habe ich schon die 1. Frage betreffend GUI und hoffe, dass ich hier richtig bin.
Nun meine Frage:
Habe eine Tabelle mit zwei Spalten. Spalte 1 ist das Kürzel der Bezeichung und Spalte 2 ist die Vollständige Bezeichnung.
z.B. Spalte 1 = FE
Spalte 2 = Ferien
Nun möchte ich, dass bei einer Combobox der Benutzer die Vollständige Bezeichnung (Spalte 2) auswählen kann, aber beim Eingabefeld soll das Kürzel (Spalte 1) erscheint.
Wie kann ich das machen?
Vielen Dank für Eure Hilfe
Ich bin eine Xbase++ und Programmier-Anfängerin. Nun habe ich schon die 1. Frage betreffend GUI und hoffe, dass ich hier richtig bin.
Nun meine Frage:
Habe eine Tabelle mit zwei Spalten. Spalte 1 ist das Kürzel der Bezeichung und Spalte 2 ist die Vollständige Bezeichnung.
z.B. Spalte 1 = FE
Spalte 2 = Ferien
Nun möchte ich, dass bei einer Combobox der Benutzer die Vollständige Bezeichnung (Spalte 2) auswählen kann, aber beim Eingabefeld soll das Kürzel (Spalte 1) erscheint.
Wie kann ich das machen?
Vielen Dank für Eure Hilfe
- Martin Altmann
- Foren-Administrator
- Beiträge: 16511
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: xbpcombox
Grüezi Nadine,
herzlich Willkommen hier bei uns!
Tut mir leid, aber das wirst Du mit der XbpComboBox() nicht lösen können! Die sieht sowas nicht vor.
Da müsstest Du Dir Dein eigenes Control bauen - aus einem XbpSle() für die Eingabe und darunter einer XbpListBox() für die aufklappende Anzeige der Einträge.
Wenn der untere Teil permanent sichtbar (=aufgeklappt) sein soll, wird es vielleicht etwas einfacher.
Ich stand vor dem selben Problem, da ich in der Maske nicht so viel Platz hatte, um ein 5-Stelliges Eingabefeld (Nationalität) zu verlängern. Also hatte ich mir erst so beholfen, dass ich eine XbpComboBox gebaut habe, die im aufgeklappten Teil die volle Breite hatte, aber oben nur die ersten fünf Zeichen anzeigte - den kompletten Eintrag hat man dann im Tooltip gesehen, wenn man die Maus drauf hielt.
War aber nicht so toll.
Da ich ja XClass++ nutze, habe ich das ganze dann umgestellt. Meine Eingabezeile ist jetzt zwei Zeichen lang und dahinter ist ein Knopf, den man anklicken kann. Dann bekommt man in einem Auswahlfenster die Langtexte angezeigt, die man durchsuchen kann und dann übernehmen kann. Eingetragen in das XbpSle() wird das Kürzel, angezeigt im Tooltip der Langtext.
Näheres dazu findest Du hier: http://www.xbaseforum.de/viewtopic.php?f=20&t=2287
Wobei ich nicht weiß, ob Du XClass++ nutzt - aber vielleicht hilft Dir das ja als Denkanstoß?
Viele Grüße,
Martin
herzlich Willkommen hier bei uns!
Tut mir leid, aber das wirst Du mit der XbpComboBox() nicht lösen können! Die sieht sowas nicht vor.
Da müsstest Du Dir Dein eigenes Control bauen - aus einem XbpSle() für die Eingabe und darunter einer XbpListBox() für die aufklappende Anzeige der Einträge.
Wenn der untere Teil permanent sichtbar (=aufgeklappt) sein soll, wird es vielleicht etwas einfacher.
Ich stand vor dem selben Problem, da ich in der Maske nicht so viel Platz hatte, um ein 5-Stelliges Eingabefeld (Nationalität) zu verlängern. Also hatte ich mir erst so beholfen, dass ich eine XbpComboBox gebaut habe, die im aufgeklappten Teil die volle Breite hatte, aber oben nur die ersten fünf Zeichen anzeigte - den kompletten Eintrag hat man dann im Tooltip gesehen, wenn man die Maus drauf hielt.
War aber nicht so toll.
Da ich ja XClass++ nutze, habe ich das ganze dann umgestellt. Meine Eingabezeile ist jetzt zwei Zeichen lang und dahinter ist ein Knopf, den man anklicken kann. Dann bekommt man in einem Auswahlfenster die Langtexte angezeigt, die man durchsuchen kann und dann übernehmen kann. Eingetragen in das XbpSle() wird das Kürzel, angezeigt im Tooltip der Langtext.
Näheres dazu findest Du hier: http://www.xbaseforum.de/viewtopic.php?f=20&t=2287
Wobei ich nicht weiß, ob Du XClass++ nutzt - aber vielleicht hilft Dir das ja als Denkanstoß?
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: xbpcombox
hi,
sollte auch bei der Combobox gehen den es ist ja nichts anderes ale beide zusammen:
a.) aus dem 2-Dim Array machst du ein 1-Dim Array :
damit fütterst du nun die Listbox der Combobox
nun musst du im Itemselect Slot folgendes tun
er nimmt also deine Position Nummer und holt sich aus der 1st Spalte das Länderkürzel und
füttert damit das SLE.
Bei mir hat das Array sogar 3 Spalten, den in der 3th Spalte habe ich die Resource zum "Land"
Damit setzt er mir auch noch die Landesflagge mit der Auswahl.
viel Spass beim ausprobieren
Nachtrag : Die ComboBox besteht ja aus 2 Teilen
also beim anpassen des Code an eine Combobox beachten
Ich habe es bislang mit einer xbpListbox und SLE gemacht, aber ich denke die Methodegina77 hat geschrieben: Habe eine Tabelle mit zwei Spalten. Spalte 1 ist das Kürzel der Bezeichung und Spalte 2 ist die Vollständige Bezeichnung.
z.B. Spalte 1 = FE
Spalte 2 = Ferien
Nun möchte ich, dass bei einer Combobox der Benutzer die Vollständige Bezeichnung (Spalte 2) auswählen kann, aber beim Eingabefeld soll das Kürzel (Spalte 1) erscheint.
sollte auch bei der Combobox gehen den es ist ja nichts anderes ale beide zusammen:
a.) aus dem 2-Dim Array machst du ein 1-Dim Array :
Code: Alles auswählen
LOCAL aLand := LANDKENZ()
// sortiere 2nd Spalte "Lang"namen
aLand := ASort( aLand,,, {|aX,aY| aX[2] < aY[2] } )
...
// Array clonen
aText := aCLONE(aLAND)
//
// Eindimensionales Array erzeugen aus 2nd Element
//
AEval( aText, {|a,i| a:=Upper(a[2])},,,.T. )
Code: Alles auswählen
iMax := LEN(aText)
FOR i := 1 TO iMax
oListbox:addItem(aText[i])
NEXT
Code: Alles auswählen
oListbox:itemSelected := {| uNIL1, uNIL2, oLBSelf | ;
nPosi := oLBSelf:getData()[1],;
::Land:setdata( SUBSTR(aLAND[nPosi][1],1,2) ),;
oListbox:hide() ,;
SetappFocus(::Land) }
füttert damit das SLE.
Bei mir hat das Array sogar 3 Spalten, den in der 3th Spalte habe ich die Resource zum "Land"
Code: Alles auswählen
METHOD KundClass:Flagge()
LOCAL aLand := LANDKENZ()
LOCAL cSeek := KUNDEN->LAND
LOCAL nFlag := 2580
LOCAL nPosi
LOCAL oFlag := ExXbpBitmap():new():create()
nPosi := ASCAN(aLand, {|x| x[1] == cSeek } )
IF nPosi > 0
nFlag := aLand[nPosi][3]
IF nFlag = 0
nFlag := 2580
ENDIF
ENDIF
oFlag:load(, nFlag )
oFlag := BMP2BMP( oFlag, { 30,24 } )
RETURN oFlag
viel Spass beim ausprobieren
Nachtrag : Die ComboBox besteht ja aus 2 Teilen
Code: Alles auswählen
aItems := oCombobox:XbpListBox:getData() // Werte in der Listbox
cBuffer:= oCombobox:XbpSLE:getData() // Wert im Eingabefeld
gruss by OHR
Jimmy
Jimmy
- Martin Altmann
- Foren-Administrator
- Beiträge: 16511
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: xbpcombox
Hallo Jimmy,
prima - da wird Sie sich freuen. Dein Beispiel ist ja genau das "Selberbauen" durch XbpSle)( und XbpListbox().
Eine XbpComboBox() kann das nicht!! Sie besteht zwar aus den beiden einzelnen Objekten, aber der XbpSle() wird immer nur mit dem Eintrag aus der XbpListBox() gefüllt.
Und genau da muß man ansetzen - wie Du ja in Deinem Beispiel auch gezeigt hast...
Viele Grüße,
Martin
prima - da wird Sie sich freuen. Dein Beispiel ist ja genau das "Selberbauen" durch XbpSle)( und XbpListbox().
Eine XbpComboBox() kann das nicht!! Sie besteht zwar aus den beiden einzelnen Objekten, aber der XbpSle() wird immer nur mit dem Eintrag aus der XbpListBox() gefüllt.
Und genau da muß man ansetzen - wie Du ja in Deinem Beispiel auch gezeigt hast...
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15696
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: xbpcombox
Hallo,
eine Combobox ist doch nichts anderes als eine Listbox und ein SLE.
Wenn man die Combobox ableitet kann man schon die setData() und getData() Methoden so ändern, dass sich das Control so verhält, allerdings seit ihr bei der Größe der Listbox flexibler wenn man sie sich selbst zusammenbaut.
In beiden Fällen muss man das Array mit den 2 Spalten mit der Listbox syncronisieren und bei der Rückgabe des Textwertes diesen durch das dazugehörige Kürzel ersetzten.
Ich frage mich allerdings ob es sinnvoll ist, die Kürzel anzuzeigen.
Ich habe solche Aktionen immer gemacht um in die DBF das Kürzel zu speichern (weniger Platz, eindeutig auch nach Wechsel der Schreibweise etc.) und immer den dazugehörigen Volltext angezeigt.
eine Combobox ist doch nichts anderes als eine Listbox und ein SLE.
Wenn man die Combobox ableitet kann man schon die setData() und getData() Methoden so ändern, dass sich das Control so verhält, allerdings seit ihr bei der Größe der Listbox flexibler wenn man sie sich selbst zusammenbaut.
In beiden Fällen muss man das Array mit den 2 Spalten mit der Listbox syncronisieren und bei der Rückgabe des Textwertes diesen durch das dazugehörige Kürzel ersetzten.
Ich frage mich allerdings ob es sinnvoll ist, die Kürzel anzuzeigen.
Ich habe solche Aktionen immer gemacht um in die DBF das Kürzel zu speichern (weniger Platz, eindeutig auch nach Wechsel der Schreibweise etc.) und immer den dazugehörigen Volltext angezeigt.
Gruß
Hubert
Hubert
- Martin Altmann
- Foren-Administrator
- Beiträge: 16511
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: xbpcombox
Hallo Hubert,
yup!
Ich habe doch auch nur geschrieben, dass es mit der XbpComboBox() nicht geht und man sich selber was basteln muß!
Wenn sie die Kurzform angezeigt bekommen will, wird sie sicher auch zu wenig Platz in ihrer Maske haben...
Viele Grüße,
Martin
yup!
Ich habe doch auch nur geschrieben, dass es mit der XbpComboBox() nicht geht und man sich selber was basteln muß!
Wenn sie die Kurzform angezeigt bekommen will, wird sie sicher auch zu wenig Platz in ihrer Maske haben...
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Re: xbpcombox
Vielen Dank für die Vorschläge. Nun habe ich meine Anforderung umsetzen können, mit folgender Zeile.
oCombo:ItemSelected := {|mp1, mp2, obj| nItem := obj:getData()[1], obj:setData( aVDIENST_ART[nItem, 1])}
Gruss gina77
oCombo:ItemSelected := {|mp1, mp2, obj| nItem := obj:getData()[1], obj:setData( aVDIENST_ART[nItem, 1])}
Gruss gina77
- Martin Altmann
- Foren-Administrator
- Beiträge: 16511
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: xbpcombox
Hallo Nadine,
Clever
Aber Du denkst dran, dass ein GetData() einen angegebenen :datalink ausführt und damit die Werte schon (z.B.) in die Datenbank geschrieben werden?
Aber das sollte in dem Fall ja vielleicht nicht so kritisch sein, da es ja nur gültige Werte sein können...
Viele Grüße,
Martin
Clever
Aber Du denkst dran, dass ein GetData() einen angegebenen :datalink ausführt und damit die Werte schon (z.B.) in die Datenbank geschrieben werden?
Aber das sollte in dem Fall ja vielleicht nicht so kritisch sein, da es ja nur gültige Werte sein können...
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.