C# ListView Отключить горизонтальную прокрутку
-
11-10-2019 - |
Вопрос
Есть ли способ, которым я могу остановить горизонтальную полосу прокрутки, когда -либо появляясь в списке? Я хочу, чтобы вертикальная полоса прокрутки показала, когда это необходимо, но я хочу, чтобы горизонтальная полоса прокрутки никогда не появлялась.
Я бы подумал, что это как -то связано с Wndproc?
Спасибо
Решение
Вы могли бы попробовать что -то подобное, я использовал в проекте один раз, и это сработало:
[DllImport ("user32")]
private static extern long ShowScrollBar (long hwnd , long wBar, long bShow);
long SB_HORZ = 0;
long SB_VERT = 1;
long SB_BOTH = 3;
private void HideHorizontalScrollBar ()
{
ShowScrollBar(listView1.Handle.ToInt64(), SB_HORZ, 0);
}
Надеюсь, поможет.
Другие советы
Существует гораздо более простой способ устранить нижнюю полосу прокрутки и иметь вертикальный показ. Он состоит в том, чтобы убедиться, что заголовок и, если нет заголовка, ряды являются шириной listview.Width - 4
И если вертикальная полоса прокрутки показана, то listview.Width - Scrollbar.Width - 4;
Следующий код демонстрирует, как:
lv.Columns[0].Width = Width - 4 - SystemInformation.VerticalScrollBarWidth;
@Bennyyboi ответ небезопасен, так как он не отслаивает стек. Вместо этого вы должны использовать следующий код для Dllimport:
[System.Runtime.InteropServices.DllImport("user32", CallingConvention=System.Runtime.InteropServices.CallingConvention.Winapi)]
[return: System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)]
private static extern bool ShowScrollBar(IntPtr hwnd, int wBar, [System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)] bool bShow);
Андреас Reiff освещает это в своем комментарии выше после того, как посмотрел еще раз, так что, я думаю, здесь все это хорошо отформатировано.
Лучшее решение - это принятый ответ, который был дан здесь: Как скрыть вертикальную полосу прокрутки в контроле .NET ListView в режиме деталей
Это работает отлично, и вам не нужны такие уловки, как настройки ширины колонны. Более того, вы отключите прокрутку прямо при создании элемента управления.
Недостаток в том, что вы должны создать свой собственный класс просмотра списка, который происходит от System.Windows.Forms.ListView
переопределить WndProc
. Анкет Но это путь.
Чтобы отключить горизонтальную полосу прокрутки, не забудьте использовать WS_HSCROLL
вместо WS_VSCROLL
(который использовался в связанном ответе). Значение для WS_HSCROLL
является 0x00100000
.