C # ListView отключить горизонтальную полосу прокрутки - PullRequest
9 голосов
/ 17 декабря 2010

Есть ли способ, которым я могу остановить отображение горизонтальной полосы прокрутки в списке? Я хочу, чтобы вертикальная полоса прокрутки отображалась при необходимости, но я хочу, чтобы горизонтальная полоса прокрутки никогда не появлялась.

Я бы предположил, что это как-то связано с WndProc?

Спасибо

Ответы [ 4 ]

9 голосов
/ 04 мая 2015

Существует гораздо более простой способ убрать нижнюю полосу прокрутки и получить вертикальное отображение. Он состоит в том, чтобы убедиться, что заголовок и, если заголовок отсутствует, строки имеют ширину listview.Width - 4, а если отображается вертикальная полоса прокрутки, то listview.Width - Scrollbar.Width - 4;

следующий код демонстрирует, как:

lv.Columns[0].Width = Width - 4 - SystemInformation.VerticalScrollBarWidth;
6 голосов
/ 01 февраля 2013

@ ответ 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);

Андреас Рейфф рассматривает это в своем комментарии выше после повторного просмотра, так что я думаю, что здесь все красиво отформатировано.

5 голосов
/ 17 декабря 2010

Вы можете попробовать что-то вроде этого, я однажды использовал в проекте, и это сработало:

[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);
}

Надеюсь, это поможет.

2 голосов
/ 19 октября 2016

Лучшим решением является принятый ответ, который был дан здесь: Как скрыть вертикальную полосу прокрутки в элементе управления .NET ListView в режиме сведений

Он отлично работает, и вам не нужны такие хитрости, как регулировка ширины столбца. Кроме того, вы отключаете полосу прокрутки вправо при создании элемента управления.

Недостатком является то, что вам нужно создать собственный класс представления списка, который наследуется от System.Windows.Forms.ListView для переопределения WndProc. Но это путь.

Чтобы отключить горизонтальную полосу прокрутки, не забудьте использовать WS_HSCROLL вместо WS_VSCROLL (который использовался в связанном ответе). Значение для WS_HSCROLL равно 0x00100000.

...