16 Stimmen

Wie kann man eine Excel-Listbox reparieren, die das letzte Element nicht in die Ansicht blättern kann?

Ein Killerproblem, das ich in Excel-UIs habe, solange ich mich erinnern kann, ist das Scrollen in Listboxen.

Wenn Sie mehr Elemente in einer Listbox haben, als angezeigt werden können, wird eine Bildlaufleiste eingeblendet. Wenn Sie die Leiste ganz nach unten scrollen und dann loslassen, "springt" die Leiste unter bestimmten Umständen eine Stufe nach oben, so dass Sie das letzte Element in der Liste nicht mehr sehen können. Dies wird hier veranschaulicht: Can't scroll all the way down

Es gibt viele Forenbeiträge zu diesem Problem, und die Lösung lautete immer: "Setzen Sie die Eigenschaft "Integrale Höhe" auf "false", und setzen Sie sie dann wieder auf "true". Was dies tut, ist leicht die Größe der Listbox, so dass es die Höhe auf die Höhe einer einzelnen Zeile gerundet ist, und dann keine Elemente ausgeblendet bleiben.

With lstbox
    .IntegralHeight = False
    .Height = myHeight
    .IntegralHeight = True
End With

Es gibt jedoch bestimmte Fälle, in denen dies nicht funktioniert. Wenn Sie sind:

  1. Programmgesteuertes Einstellen der Höhe der Listbox
  2. NO mit einfacher Listbox-Auswahl (fmMultiSelectSingle)

Dann einfach Einstellung integraler Höhe auf false und dann true nach oder zwischen Änderungen an der Höhe wird eine Anpassung an die Höhe der Listbox zu machen, aber wenn Sie gehen, um nach unten zu scrollen, wird das Problem bleiben - das letzte Element nicht gesehen werden kann.

Der Schlüssel zu dieser frustrierenden Frage ist, dass, während alle anderen im Internet bestätigen, dass die "integralHeight"-Lösung für sie funktioniert, diese sehr speziellen Fälle frustriert sind und sich fragen, warum es bei ihnen nicht funktioniert. Wie bekommen sie also ihr Problem in den Griff?

0voto

Kayne Punkte 1

Gefunden lächerlich einfachen Weg, um dieses Problem zu lösen. passen Sie Ihre Höhe nach oben oder unten ein wenig, so dass die untere Zeile des Listenfeldes ist zwischen Check-Boxen, dann können Sie nach unten scrollen, um letzte Element, auch wenn IntegralHeight auf false gesetzt ist

0voto

Paul Cain Punkte 1

Danke Alain. Deine Lösung hat bei mir gut funktioniert.

Ich fand ein weiteres Problem im Zusammenhang mit der Höhe der ListBox bei der Größenänderung, dass es in einer unvorhersehbaren Weise abhängig von der ursprünglichen Höhe variiert. Die geänderte Höhe war wiederum anders, wenn sie auf einem anderen Rechner mit 125% Textskalierung angezeigt wurde. Wenn ich z. B. eine Höhe zwischen 358 und 370 einstelle, beträgt die angepasste Höhe auf meinem Rechner entweder 370,65 oder 371,4, aber auf dem Rechner mit 125 % Textskalierung beträgt sie 360,1, 370,25 oder 380,45. Bei einer so großen Variabilität führte dies dazu, dass die ListBox andere darunter liegende Steuerelemente verdecken konnte.

Die Lösung bestand darin, mit der gewünschten Maximalhöhe zu beginnen und die ursprüngliche Höhe zu verringern, bis die geänderte Höhe geringer war als die gewünschte Maximalhöhe. Ich tue dies jedes Mal, wenn ich die ListBox anzeige.

    Hmax = 372      'Target Height 
    H1 = Hmax
    With SteelForm.Controls.Item("ListBox1")
        Do
            H1 = H1 - 1
            .IntegralHeight = False
            .Height = H1
            .IntegralHeight = True
            .MultiSelect = fmMultiSelectSingle
            .MultiSelect = fmMultiSelectExtended
            DoEvents
        Loop Until .Height < Hmax
    End With

-1voto

Jon49 Punkte 4174

Was ich in der Vergangenheit in Foren gesehen habe, ist das Hinzufügen einer zusätzlichen leeren Zeile zu Ihrem Listenfeld. Das sollte es tun.

-1voto

sridevi Punkte 1

Setzen Sie einfach die Eigenschaft Integrale Höhe auf True

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X