none
Listbox

    Frage

  • Hallo NG,

    ich habe auf einer Form eine Listbox, die bei Bedarf ein- oder ausgeblendet wird. Der User kann hier einen Filter auswählen (MultiSelect = .T.). Funktioniert perfekt. Wenn jetzt der User seine Auswahl noch einmal ansehen will kann er die Listbox wieder einblenden und ich markiere die ausgewählten Elemente programatisch. Auch das funktioniert perfekt, doch jetzt zu meinem Problem. Wenn die ausgewählten Elemente programatisch auf selected gesetzt wurden ist die Auswahl sofort weg wenn man den Scroll-Balken auch nur berührt. Wenn man dagegen die Auswahl mit der Maus vorgenommen hat bleibt die Auswahl erhalten.

    Muss ich damit leben oder was kann ich tun, damit auch die programatische Selektierung beim scrollen erhalten bleibt?

    Ich bedanke mich für jeden Tipp

    Gruss Uli

    Donnerstag, 28. Februar 2013 08:06

Antworten

  • Das heißt dann doch, das eigentliche Problem ist gar nicht das wieder sichtbar schalten, richtig? Das antippen der Scrollbar würde dann auch schon von vornherein dieses Verhalten haben.

    Alias und Multiselect vertragen sich sowieso nicht so gut, es gibt eben nur einen Datensatzzeiger. Mach mal ein SCAN..ENDCAN und fülle die Listbox mit Additem() oder selektiere die Daten in eine Arrayeigenschaft der Listbox, dann hört der Spuk auf.

    Tschüß, Olaf.


    Olaf Doschke (Setmics)

    • Als Antwort markiert Uli Münch Samstag, 2. März 2013 06:20
    Freitag, 1. März 2013 07:47

Alle Antworten

  • >Wenn jetzt der User seine Auswahl noch einmal ansehen will kann er die Listbox wieder einblenden und ich markiere die ausgewählten Elemente programatisch.

    Aber der User hat Sie doch vorher schon selektiert. Deselektierst Du Items, bevor Du die Listbox visible = .F. schaltest? Wenn Du nur visible umswitcht, bleibt doch alles beim alten.

    Was ist denn Rowsource der Listbox? Value? Alias oder Fields? SQL-Statement? Array? oder per Add()/AddItem() zugefügte Items?


    Olaf Doschke (Setmics)

    • Bearbeitet Olaf Doschke Donnerstag, 28. Februar 2013 13:54
    Donnerstag, 28. Februar 2013 13:43
  • Hallo Olaf,

    danke für Deinen Tipp. Habe es gerade ausprobiert, ändert aber nichts. Selbst wenn ich Visible nicht anfasse, sondern nur Height = 0 setze. Bei scrollen gehen die Markierungen verloren.

    Die RowSourceType  ist Alias, ein mit sqlexec(..) generierter Cursor.

    Gruss Uli


    • Bearbeitet Uli Münch Freitag, 1. März 2013 06:50
    Freitag, 1. März 2013 06:48
  • Das heißt dann doch, das eigentliche Problem ist gar nicht das wieder sichtbar schalten, richtig? Das antippen der Scrollbar würde dann auch schon von vornherein dieses Verhalten haben.

    Alias und Multiselect vertragen sich sowieso nicht so gut, es gibt eben nur einen Datensatzzeiger. Mach mal ein SCAN..ENDCAN und fülle die Listbox mit Additem() oder selektiere die Daten in eine Arrayeigenschaft der Listbox, dann hört der Spuk auf.

    Tschüß, Olaf.


    Olaf Doschke (Setmics)

    • Als Antwort markiert Uli Münch Samstag, 2. März 2013 06:20
    Freitag, 1. März 2013 07:47
  • Hi Uli,

    ich muss zu meiner Schande gestehen: "Ich hasse die Listbox" :)

    Und aus diesem Grund baue ich mir die meistens als Grid nach. Will heissen: Textbox + Button rechts daneben und ein Klick auf den Button blendet unter der Textbox das Grid ein.

    Funktioniert prima und ich muss mich mit diesem verqueren Listbox/Combobox Ding nicht rumschlagen :) :) :)

    JM2C


    Gruss / Best regards
    -Tom
    Debugging is twice as hard as writing the code in the first place.
    Therefore, if you write the code as cleverly as possible,
    you are, by definition, not smart enough to debug it. 010101100100011001010000011110000101001001101111011000110110101101110011


    Freitag, 1. März 2013 07:52
  • Hallo Tom,

    Du beschreibst allerdings gerade eher die Combobox mit dem Dropdown button.

    So schlimm sind Listbox und Combobox auch nicht, nur das Multiselect funktioniert nicht gut mit Alias und programmatischem setzen von Selected(n). Am besten geht es noch mit AddItem(), auch bezüglich dem deaktivieren von items. Siehe auch http://support.microsoft.com/kb/156737/en-us

    Richtig ist, dass ein Grid mehr Möglichkeiten bietet, alleine schon mit Farbgebung etc.. Und man kann auch das Multiselect ohne Checkbox nachahmen, es gibt ja durchaus Bindevents, um alle Clicks zentral abzufangen und ein Selected-Feld zu verwalten.

    Uli , probiere im ersten Ansatz einfach mal eine Schleife mit Additem(). Ds wird Dein Problem lösen. Und dann kannst Du immer noch über ein Grid an der Stelle nachdenken.

    Tschüß, Olaf.


    Olaf Doschke (Setmics)

    Freitag, 1. März 2013 08:09
  • Hallo Tom, hallo Olaf,

    das Problem war vermutlich die Kombination RowSourceType = Alias und MultiSelect = .T.

    Ich habe jetzt ein SCAN..ENDSCAN mit Additem() eingebaut und es funktioniert perfekt.

    Besten Dank.

    Gruss Uli

    Samstag, 2. März 2013 06:24