Ist es ein Weg, um auto-scroll einer listbox in C# WinForms
Ich ein schreiben eines Programms zeigt eine Liste der Anzahl in verschiedene Listboxen auf einem großen monitor, meine Frage ist, ist es ein Weg, um auto-scrollen Sie in der Liste Fenster zeigt alle Daten in die Felder?
- Welche Art von Anwendung, die Sie sind targeting ? WinForm, ASP.Net, WPF ?
- Sorry, WinForms
- viele funktionierende Beispiele sind online @Evanark wenn Sie vertraut sind mit Event-Handler und statische Methoden Erstellung...dies alles kann sehr einfach durchgeführt werden..
- wenn Sie eine intem aus dem Listenfeld (über
listBox.SelectedIndex = number;
oderlistBox.SelectedItem = "string";
), die listbox wird automatisch gescrollt, um das ausgewählte Element. - mögliche Duplikate
InformationsquelleAutor Evanark | 2015-02-02
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Normalerweise würde ich tun:
aber Sie können auch versuchen
Hoffe, das hilft 🙂
UserDrawVariable
. In einem solchen Fall müssen Sie rufenGetItemHeight
beginnend vom letzten Element index und die Mathematik zu tun.Direkt zu Steuern das scrollen, auswählen, ohne die Elemente, die Sie brauchen, um verwenden Sie die Win32 -
SetScrollPos
Methode vonUser32.dll
. Hier ist eine erweiterte Klasse, die gibt Ihnen grundlegende Unterstützung:Anschließend können Sie den X-oder Y-Blättern, schnell und einfach. Diese Arbeit sollte für die anderen Steuerelemente zu.
Wenn Sie möchten, stellen Sie das Steuerelement automatisch ein Bildlauf nach oben und unten, müssen Sie eine sich wiederholende timer mit einem Intervall von rund 20 Millisekunden. Verfolgen Sie die scroll-position und Richtung, und erhöhen oder verringern Sie dementsprechend die Zusendung der Lage, die Kontrolle über diese Methoden.
UPDATE:
Hatte ich ein paar Probleme mit der SetScrollPos-Methode oben geschrieben, in Erster Linie um die Bildlaufleiste zu bewegen, aber die Inhalte nicht. Wahrscheinlich ist es nur eine kleine Kontrolle, aber in der Zwischenzeit, hier ist eine etwas "außerhalb der box" MarqueeListView Lösung..
Ersten, die enum repräsentiert die Bildlaufleiste zu verwenden. Ich verwendete display-Namen anstelle der Win32-Namen für diese (
SB_HORIZ
undSB_VERT
), nur um die Dinge ein wenig klarer.Anderen enum für die scroll-Kommando-codes selbst - ich habe getrimmt, alles abgesehen von Bis (
SB_LINEUP
), Unten (SB_LINEDOWN
) und EndScroll (SB_ENDSCROLL
). EndScroll ist erforderlich, nachdem der scroll-Nachricht zu informieren, die Kontrolle zu aktualisieren.Dann endlich die Klasse selbst. Es ist im Grunde beginnt, indem Sie nach unten scrollen, alle 20ms (durch Standard - Hinweis: diese ist veränderbar über die MarqueeSpeed-Eigenschaft). Es bekommt dann die scroll-position und vergleicht es mit dem letzten mal. Sobald die scroll-Leiste nicht verschieben, es kehrt die Richtung. Dies ist zu bekommen, um Probleme, die ich hatte mit der
GetScrollInfo
Methode.Schließlich, hier ist eine kurze Main-Methode, um es zu testen:
Bitte beachten Sie, dies ist nicht unbedingt die "richtige" oder beste Weg, Dinge zu tun, aber ich dachte mir, ein anderer Ansatz könnte Ihnen einige Ideen!
Ich hatte gehofft, zu verwenden
SetScrollPos
das wäre eine viel bessere und gleichmäßigere Wirkung. Dann können Sie einfach zählen die Beschleunigung und Verzögerung - ggf. Optional Bremsen zum Stillstand, wenn die Maus darüber fährt, dann beschleunigt entfernt auf Maus etc. Es ist einfach nicht ball spielen derzeit zwar - ich habe eine funktionierende scroll-update-Methode in einem alten Projekt irgendwo, also ich werde aktualisieren, wenn ich es wieder zum laufen bekommen.Hoffe, das hilft!
MarqueeListView
wenn Sie möchten, dass die auto-scrolling aktiviert.SelectedIndex
. Es hat ein anderes problem - wenn das ListView-Steuerelement mit einem der Symbol-oder Fliesen Ansichten, es kann schwer sein, um die Geschwindigkeit zu Steuern, da es den Zyklus über den Artikeln als auch nach unten - daher der Win32-scroll-message-Ansatz.