У меня есть .NET 3.5 WinForm, у которой есть ListView с представлением, установленным в режиме сведений.Он функционирует как прокручиваемый список элементов состояния в длинной фоновой задаче.У меня есть последний ListViewItem (статус записи), добавленный в нижней части.Чтобы убедиться, что это видно, я добавляю видимость нового элемента после добавления.Это все работает отлично;представление списка автоматически прокручивается вниз, чтобы показать самый последний элемент.
private void AddListItem(DateTime timestamp, string message, int index)
{
var listItem = new ListViewItem(timestamp.ToString());
listItem.SubItems.Add(message);
statusList.Items.Insert(index, listItem);
statusList.Items[statusList.Items.Count - 1].EnsureVisible();
}
Проблема заключается в том, что если пользователь прокручивает вверх, чтобы просмотреть старые сообщения, ListView будет прокручиваться вниз, чтобы создать новый элемент.видимый по мере его поступления. Есть ли способ управления этим поведением, чтобы проверить, взаимодействует ли пользователь с полосой прокрутки (в частности, если он удерживает кнопку мыши на полосе прокрутки)?Вероятно, это также приемлемо для обнаружения, если прокрутка всегда внизу.если его нет внизу, то я бы не обеспечил видимость последнего элемента.Что-то вроде:
private void AddListItem(DateTime timestamp, string message, int index)
{
var listItem = new ListViewItem(timestamp.ToString());
listItem.SubItems.Add(message);
statusList.Items.Insert(index, listItem);
if (!statusList.IsScrollbarUserControlled)
{
statusList.Items[statusList.Items.Count - 1].EnsureVisible();
}
}
Странно то, что когда пользователь удерживает «ручку» полосы прокрутки на месте, ручка не перемещается (это означает, что представление фактически не прокручивается программно вниз),но в действительности это.
Обновление : возможно ли определить положение полосы прокрутки, т. е. находится ли она внизу или нет?