Mehere Einträge in einer ListBox markieren

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
JanR
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 129
Registriert: Di, 18. Okt 2005 14:44

Mehere Einträge in einer ListBox markieren

Beitrag von JanR »

Hi,

wie kann ich in einer ListBox mehrere Einträge markieren?
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

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
:grommit:
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.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14655
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Hallo Jan,

da gibt es einen Schalter für: :markMode muß auf XBPLISTBOX_MM_MULTIPLE oder XBPLISTBOX_MM_EXTENDED gesetzt werden.

Jan
JanR
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 129
Registriert: Di, 18. Okt 2005 14:44

Beitrag von JanR »

Hallo Martin,

ich meine in der Anzeige, also wenn das Programm schon läuft. In der ListBox stehen zum Beispiel 5 Einträge und 3 von denen möchte ich markieten. Ist das möglich?
JanR
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 129
Registriert: Di, 18. Okt 2005 14:44

Beitrag von JanR »

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?
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

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
:grommit:
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.
JanR
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 129
Registriert: Di, 18. Okt 2005 14:44

Beitrag von JanR »

Hier der Quellcode von der ListBox:

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")
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.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

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
:grommit:
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.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

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
:grommit:
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.
Antworten