Problem mit Listbox SetItem

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Montecore
User
Beiträge: 5
Registriert: Freitag 19. November 2004, 13:09

Mittwoch 1. Dezember 2004, 12:05

Hallo allerseits,

mein Tab-Order Problem habe ich erstmal hintenangestellt, aber ich bin mittlerweile auf das nächste Problem gestoßen das mir kummer macht, vielleicht hat hier jemand eine Lösung?

Ich habe eine Listbox mit diversen Namen. Sagen wir mal 200 Namen. Die Listbox zeigt 25 davon auf einmal an. So weit so gut. Nun möchte ich per SetItem(x) die Markierung der Listbox auf einen ganz bestimmten Namen setzen der zum Index X paßt. Auch das funktioniert. Allerdings habe ich nun das Problem, das ich es gerne so hätte, dass die Zeilen der Listbox so gescrollt werden, dass die markierte Zeile in die Mitte der Listbox, sprich in Zeile 12 oder 13 erscheint. Leider ist es nämlich so, das die markierte Zeile die letzte Spalte der Listbox ist und ich die Nachfolgenden nicht mehr sehen kann.

Es wöre echt klasse, wenn mir einer von Euch hierbei ein wenig die Richtung weisen könnte?

Danke schon mal und Gruß,
Montecore
Gast

Mittwoch 1. Dezember 2004, 16:18

Montecore hat geschrieben:Hallo allerseits,

mein Tab-Order Problem habe ich erstmal hintenangestellt, aber ich bin mittlerweile auf das nächste Problem gestoßen das mir kummer macht, vielleicht hat hier jemand eine Lösung?

Ich habe eine Listbox mit diversen Namen. Sagen wir mal 200 Namen. Die Listbox zeigt 25 davon auf einmal an. So weit so gut. Nun möchte ich per SetItem(x) die Markierung der Listbox auf einen ganz bestimmten Namen setzen der zum Index X paßt. Auch das funktioniert. Allerdings habe ich nun das Problem, das ich es gerne so hätte, dass die Zeilen der Listbox so gescrollt werden, dass die markierte Zeile in die Mitte der Listbox, sprich in Zeile 12 oder 13 erscheint. Leider ist es nämlich so, das die markierte Zeile die letzte Spalte der Listbox ist und ich die Nachfolgenden nicht mehr sehen kann.

Es wöre echt klasse, wenn mir einer von Euch hierbei ein wenig die Richtung weisen könnte?

Danke schon mal und Gruß,
Montecore
Also eingebaute Funktion gibt es dazu nicht.
Es gibt aber in der ListBox die Funktion SetFirstItem(x).
ist x 10, dann ist der erste sichtbare Eintrag der 10. in der Liste.

Du könntest dann diesen Wert berechnen.
Mit GetClientSize kannst du die Höhe der Listsbox durch GetCharHeight()
dividieren, so kommst du (ungefähr) auf die Anzahl der Elemente,
die im sichbaren Bereich liegen,
Nun kannst du auch x berechnen, und SetFirstItem entsprechend aufrufen,
dann noch die Funktion SetSelection().

BTW: SetItem gibt es aber nur für ListCtrl, aber nicht für ListBox.
Montecore
User
Beiträge: 5
Registriert: Freitag 19. November 2004, 13:09

Donnerstag 2. Dezember 2004, 09:39

Achje ich bin doof da habe ich in die falsche Zeile geschaut ich meinte natürlich ein SetSelection(x) sorry für die Verwirrung die ich gestifttet habe.
Aber das mit dem SetFirstItem ist eine gute Idee vielen Dank für den Hinweis, werde ich nachher gleich mal ausprobieren. Habe schon geguckt das gibt es zum Glück auch für die ListBox. :)

Danke und Gruß,
Montecore...
Antworten