Я пытаюсь заставить мой ListBox автоматически загружать больше элементов, когда вы прокручиваете его до конца.Для этого мне понадобилось событие прокрутки.
В списке по умолчанию нет события прокрутки.Мне удалось найти некоторый код, в котором я создал новый класс и унаследовал все содержимое из списка по умолчанию.Мне удалось добавить событие прокрутки.
Переопределение отлично работает, когда полоса прокрутки используется щелчком мыши, но, к сожалению, не будет захватывать событие при использовании колеса прокрутки.
IЯ пытался оптимизировать его, чтобы он также использовал колесо прокрутки, но безуспешно.
Класс, который я хотел бы изменить, поэтому он также будет поднимать колесо прокрутки.
using System;
using System.Windows.Forms;
public class BetterListBox : ListBox
{
// Event declaration
public delegate void BetterListBoxScrollDelegate(object Sender, BetterListBoxScrollArgs e);
public event BetterListBoxScrollDelegate Scroll;
// WM_VSCROLL message constants
private const int WM_VSCROLL = 0x0115;
private const int SB_THUMBTRACK = 5;
private const int SB_ENDSCROLL = 8;
protected override void WndProc(ref Message m)
{
// Trap the WM_VSCROLL message to generate the Scroll event
base.WndProc(ref m);
if (m.Msg == WM_VSCROLL)
{
int nfy = m.WParam.ToInt32() & 0xFFFF;
if (Scroll != null && (nfy == SB_THUMBTRACK || nfy == SB_ENDSCROLL))
Scroll(this, new BetterListBoxScrollArgs(this.TopIndex, nfy == SB_THUMBTRACK));
}
}
public class BetterListBoxScrollArgs
{
// Scroll event argument
private int mTop;
private bool mTracking;
public BetterListBoxScrollArgs(int top, bool tracking)
{
mTop = top;
mTracking = tracking;
}
public int Top
{
get { return mTop; }
}
public bool Tracking
{
get { return mTracking; }
}
}
}