Mehere Einträge in einer ListBox markieren
Moderator: Moderatoren
Mehere Einträge in einer ListBox markieren
Hi,
wie kann ich in einer ListBox mehrere Einträge markieren?
wie kann ich in einer ListBox mehrere Einträge markieren?
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Jan,
meinst Du jetzt programmtechnisch (also vor der Anzeige)?
Die Listbox muss als markmode XBPLISTBOX_MM_EXTENDED haben, dann kannst Du mit SetData(...) die entsprechenden Einträge markieren.
Viele Grüße,
Martin
meinst Du jetzt programmtechnisch (also vor der Anzeige)?
Die Listbox muss als markmode XBPLISTBOX_MM_EXTENDED haben, dann kannst Du mit SetData(...) die entsprechenden Einträge markieren.
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.
Danke Martin und Jan, das klappt jetzt schonmal. `
Wenn ich jetzt zum Beispiel 3 Einträge markiert habe und bei gedrückter STRG-Taste auf einen Eintrag klicke, soll er mir den Namen zurückgeben. Das klappt aber nur bedingt.
Klicke ich auf einen, bekomme ich aber immer nur den Namen des ersten markieren Eintrages zurück und nicht den auf den ich gerade geklickt habe. Gibt es dazu auch eine Lösung?
Wenn ich jetzt zum Beispiel 3 Einträge markiert habe und bei gedrückter STRG-Taste auf einen Eintrag klicke, soll er mir den Namen zurückgeben. Das klappt aber nur bedingt.
Klicke ich auf einen, bekomme ich aber immer nur den Namen des ersten markieren Eintrages zurück und nicht den auf den ich gerade geklickt habe. Gibt es dazu auch eine Lösung?
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Jan,
wenn Du am Ende ausliest, dann bekommst Du nur alle markierten Einträge - Du weißt aber nicht, in welcher Reihenfolge sie angeklickt wurden!
Wenn Du also auf das Anklicken als solches reagieren willst, musst Du Dir mal den ItemMarked()-Event anschauen.
Viele Grüße,
Martin
wenn Du am Ende ausliest, dann bekommst Du nur alle markierten Einträge - Du weißt aber nicht, in welcher Reihenfolge sie angeklickt wurden!
Wenn Du also auf das Anklicken als solches reagieren willst, musst Du Dir mal den ItemMarked()-Event anschauen.
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.
Hier der Quellcode von der ListBox:
Mit Klick auf einen Eintrag kann ich ihn markieren. Durch einen Doppelklick möchte ich aber den Namen zurückgeben. Das funktioniert ohne Probleme, wenn keiner Markiert ist. Sind aber welche markiert, gibt er immer nur den Namen des Ersten markierten Eintrages in der Listbox zurück. Er soll aber den Namen zurückgeben, auf dessen Eintrag ich geklickt habe und nicht den ersten markierten.
Code: Alles auswählen
oListBox := XbpListBox():new(oDialog, oDialog, {10,50}, {100,100})
oListBox:markMode := XBPLISTBOX_MM_MULTIPLE
oListBox:create()
oListBox:lbDblClick := {|| MsgBox(getAktuellenEintrag(oListBox))}
oListBox:addItem("Test1")
oListBox:addItem("Test2")
oListBox:addItem("Test3")
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Jan,
nein!
Wenn Du doppelklickst auf einen Eintrag, gibt er Dir alle markierten zurück - dies entspricht nämlich einem Return.
Bei XBPLISTBOX_MM_MULTIPLE bekommst Du als Rückgabe ein Array, das alle markierten enthält.
Es tut mir leid, aber das wirst Du sicherlich auf diese Art so nicht lösen können - sorry.
Was willst Du denn machen? Was ist der Hintergrund?
Viele Grüße,
Martin
nein!
Wenn Du doppelklickst auf einen Eintrag, gibt er Dir alle markierten zurück - dies entspricht nämlich einem Return.
Bei XBPLISTBOX_MM_MULTIPLE bekommst Du als Rückgabe ein Array, das alle markierten enthält.
Es tut mir leid, aber das wirst Du sicherlich auf diese Art so nicht lösen können - sorry.
Was willst Du denn machen? Was ist der Hintergrund?
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.
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Jan,
da Du Dich nicht mehr auf Deinen Thread hin gemeldet hast, nehme ich mal an, Du hast eine Lösung für Dich gefunden.
Für die anderen Interessierten eine Anregung: Wer so etwas ähnliches machen will, muss sich halt eine Art Listbox selber bauen - und zwar aus einem ein- oder zweispaltigem Browse.
Bei einem zweispaltigen Browse könnte man in der ersten Spalte eine Grafik anzeigen lassen (leeres Kästchen oder angehaktes Kästchen - je nachdem, ob der Eintrag in der zweiten Spalte markiert sein soll oder nicht). In dem Array steht halt in der ersten Spalte ein Boolean (.t. oder .f.) und in der zweiten Spalte der entsprechende Eintrag. Bei einem einfachen Klick auf die Zeile wird die erste Spalte negiert. Bei einem Doppelklick kannst Du wie gewünscht reagieren.
Oder Du machst das ganze mit nur einer Spalte und entsprechend anderer Hintergrundfarbe. Beispiel: Hintergrundfarbe ist weiß und Schriftfarbe schwarz. Wird ein Eintrag angeklickt, wird die Hintergrundfarbe blau und die Schriftfarbe weiß. Bei einem Doppelklick kannst Du auch hier entsprechend reagieren. Wobei Du Dir hier überlegen mußt, inwieweit Du das SWB kopieren willst: normalerweise müsstest Du ja bei einem Klick auf einen nicht-markierten Eintrag alle markierten Einträge demarkieren und nur den aktuellen Eintrag markieren. Bei einem Klick bei gedrückter STRG-Taste müsste dann der entsprechende Eintrag zusätzlich markiert (bzw. demarkiert) werden und bei einem Klick mit gedrückter Shift-Taste müssten alle Einträge vom zuvor markierten bis zum aktuellen in Ihrer Markierung umgedreht werden! Oder Du machst das halt so, dass man die anderen Markierungen nur durch erneutes Anklicken entfernen kann und erleichterst sozusagen das Handling ein wenig, da der Nutzer nicht mit den Tasten hantieren muß!
Ich persönlich würde die erste Variante (zwei Spalten) auf jeden Fall vorziehen, da es einfacher umzusetzen ist und sich mehr an dem SWB orientiert.
Viele Grüße,
Martin
da Du Dich nicht mehr auf Deinen Thread hin gemeldet hast, nehme ich mal an, Du hast eine Lösung für Dich gefunden.
Für die anderen Interessierten eine Anregung: Wer so etwas ähnliches machen will, muss sich halt eine Art Listbox selber bauen - und zwar aus einem ein- oder zweispaltigem Browse.
Bei einem zweispaltigen Browse könnte man in der ersten Spalte eine Grafik anzeigen lassen (leeres Kästchen oder angehaktes Kästchen - je nachdem, ob der Eintrag in der zweiten Spalte markiert sein soll oder nicht). In dem Array steht halt in der ersten Spalte ein Boolean (.t. oder .f.) und in der zweiten Spalte der entsprechende Eintrag. Bei einem einfachen Klick auf die Zeile wird die erste Spalte negiert. Bei einem Doppelklick kannst Du wie gewünscht reagieren.
Oder Du machst das ganze mit nur einer Spalte und entsprechend anderer Hintergrundfarbe. Beispiel: Hintergrundfarbe ist weiß und Schriftfarbe schwarz. Wird ein Eintrag angeklickt, wird die Hintergrundfarbe blau und die Schriftfarbe weiß. Bei einem Doppelklick kannst Du auch hier entsprechend reagieren. Wobei Du Dir hier überlegen mußt, inwieweit Du das SWB kopieren willst: normalerweise müsstest Du ja bei einem Klick auf einen nicht-markierten Eintrag alle markierten Einträge demarkieren und nur den aktuellen Eintrag markieren. Bei einem Klick bei gedrückter STRG-Taste müsste dann der entsprechende Eintrag zusätzlich markiert (bzw. demarkiert) werden und bei einem Klick mit gedrückter Shift-Taste müssten alle Einträge vom zuvor markierten bis zum aktuellen in Ihrer Markierung umgedreht werden! Oder Du machst das halt so, dass man die anderen Markierungen nur durch erneutes Anklicken entfernen kann und erleichterst sozusagen das Handling ein wenig, da der Nutzer nicht mit den Tasten hantieren muß!
Ich persönlich würde die erste Variante (zwei Spalten) auf jeden Fall vorziehen, da es einfacher umzusetzen ist und sich mehr an dem SWB orientiert.
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.