C# ListView Отключить Горизонтальную Полосу Прокрутки

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

Я бы предположил, что это будет иметь какое-то отношение к WndProc?

спасибо

4 ответов


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

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

следующий код demostrates как:

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

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


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

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

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

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