5 Stimmen

Wie kann ich eine horizontale Bildlaufleiste zu einer VBA ListBox hinzufügen?

Ich möchte eine horizontale Bildlaufleiste zu einer VBA ListBox hinzufügen.

Es scheint, dass die eingebaute ListBox nicht automatisch eine horizontale Bildlaufleiste hinzufügt. Ich habe eine Reihe von Feldern, deren Inhalt die Breite der ListBox überschreitet und somit für den Benutzer nicht lesbar ist.

Ich fand dieser Artikel Der Code schlägt jedoch fehl, da er auf den hwnd der ListBox zugreift (der in VBA offenbar nicht verfügbar ist). Ich möchte lieber nicht eine native DLL schreiben, um dies zu erreichen, da ich vermute, dass es einen besseren Weg gibt.

Irgendeine Idee, wie ich eine horizontale Bildlaufleiste zu einer VBA ListBox hinzufügen kann?

Ich bin offen für die Idee der Verwendung eines alternativen Steuerelements statt immer es mit der ListBox speziell zu arbeiten.

6voto

THEn Punkte 1860

Haben Sie die Eigenschaft ColumnWidths ausprobiert? Ich habe eine Listbox mit horizontaler Bildlaufleiste. Ich musste nur ColumnWidths Eigenschaft hinzufügen.

Ich habe zum Beispiel

m e.Listbox1.Columnwidts ="0.5 in;0.2 in;1.5 in;0.75 in;0.5 in"

3voto

Lunatik Punkte 3748

Wenn ich nichts übersehe, erhält eine VBA-Listbox automatisch eine horizontale Bildlaufleiste, wenn die Summe ihrer ColumnWidths Eigenschaft seine eigene Breite überschreitet.

Mir sind keine Eigenschaften bekannt, die dieses Verhalten beeinflussen, d. h. ich weiß nicht, wie man die Anzeige der horizontalen Bildlaufleiste erzwingen oder deaktivieren kann.

3voto

Access fügt automatisch eine horizontale Bildlaufleiste hinzu, wenn die Spaltenbreite die Breite der Listbox überschreitet. JEDOCH, wenn Sie mehrere Spalten verwenden, kann die erste Spalte nicht auf 0 gesetzt werden. Sie müssen mindestens irgendeinen Wert darin haben, auch wenn es nur 0,1 ist" Hoffentlich hilft das.

0voto

Alan McBee Punkte 4039

In diesem Artikel ist der einzige Grund, warum er ScaleMode erhält, die Breite der horizontalen Bildlaufleiste festzulegen. Sie müssen das nicht tun.

SendMessageByNum List1.hwnd, LB_SETHORIZONTALEXTENT, 800, 0

wobei 800 die Pixelbreite ist, auf die das Listenfeld nach rechts scrollen kann.

Sie benötigen immer noch das hWnd. Am besten ist es, eine externe DLL (in VB geschrieben) zu verwenden, die die untergeordneten Fenster Ihres Prozesses aufzählen kann, bis sie die Windows-Klasse für die Listbox findet (Sie müssen eine Möglichkeit finden, die übergeordnete Klasse eindeutig zu identifizieren, z. B. den Fenstertitel/-text oder etwas anderes). Dieselbe DLL könnte auch den obigen SendMessage-Aufruf ausführen, um die horizontale Textausdehnung festzulegen (vielleicht könnte sie auch die Breite der enthaltenen Listenelemente messen).

0voto

Der Griff zum Listenfeld kann wie folgt erhalten werden :-

Dim ListHwnd As Integer lstboxName.SetFocus ListHwnd = GetFocus()

Verwenden Sie dieses ListHwnd als ersten Parameter für die Funktion sendmessage...

Da die Funktion GetFocus in VBA nicht standardmäßig vorhanden ist, müssen wir die folgende Erklärung angeben

Private Declare Function GetFocus Lib "user32" () As Integer

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