мой коллега А сказал, что единственная причина использовать GOTO состоит в том при программировании себя до сих пор в угол, что это - единственный выход. Другими словами, надлежащий дизайн загодя и Вы не должны будете использовать GOTO позже.
я думал, что этот комик иллюстрирует, что красиво "Я мог реструктурировать поток программы или использовать тот мало 'GOTO' вместо этого". GOTO является слабым выходом, когда у Вас есть слабый дизайн. Velociraptors охотятся на слабое .
Вам нужно будет добавить поддержку в класс ListView, чтобы вы могли получать уведомления о событиях прокрутки. Добавьте новый класс в свой проект и вставьте приведенный ниже код. Скомпилировать. Перетащите новый элемент управления listview из верхней части панели инструментов в форму. Реализуйте обработчик для нового события Scroll.
using System;
using System.Windows.Forms;
class MyListView : ListView {
public event ScrollEventHandler Scroll;
protected virtual void OnScroll(ScrollEventArgs e) {
ScrollEventHandler handler = this.Scroll;
if (handler != null) handler(this, e);
}
protected override void WndProc(ref Message m) {
base.WndProc(ref m);
if (m.Msg == 0x115) { // Trap WM_VSCROLL
OnScroll(new ScrollEventArgs((ScrollEventType)(m.WParam.ToInt32() & 0xffff), 0));
}
}
}
Помните, что позиция прокрутки (ScrollEventArgs.NewValue) не имеет смысла, она зависит от количества элементов в ListView. Я установил для него значение 0. Следуя вашим требованиям, вы хотите следить за уведомлением ScrollEventType.EndScroll, чтобы узнать, когда пользователь прекратил прокрутку. Все остальное поможет вам обнаружить, что пользователь начал прокрутку. Например:
ScrollEventType mLastScroll = ScrollEventType.EndScroll;
private void myListView1_Scroll(object sender, ScrollEventArgs e) {
if (e.Type == ScrollEventType.EndScroll) scrollEnded();
else if (mLastScroll == ScrollEventType.EndScroll) scrollStarted();
mLastScroll = e.Type;
}
См. Этот пост Событие прокрутки ListView
Используйте собственный класс окна для прослушивания для прокрутки сообщений на список. Будет работать с любым управлением.
Поймать событие прокрутки теперь легко в .net 4.
Поймайте событие Loaded от вашего ListView (m_ListView) и сделайте следующее:
if (VisualTreeHelper.GetChildrenCount(m_ListView) != 0)
{
Decorator border = VisualTreeHelper.GetChild(m_ListView, 0) as Decorator;
ScrollViewer sv = border.Child as ScrollViewer;
sv.ScrollChanged += ScrollViewer_ScrollChanged;
}
затем реализуйте функцию ScrollViewer_ScrollChanged:
private void ScrollViewer_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
...
}