简体   繁体   中英

Hide vertical scroll bar in ListBox control

I'm developing an application that requires a ListBox control. Unfortunately, when I add too many items in the ListBox , a vertical scroll bar is shown. Is there something I can do to hide the vertical scroll bar shown by the ListBox ? I can see that there's a property to hide the horizontal scroll bar but there's no property for the vertical scroll bar.

The problem was solved. I've simply created a new project of template a class library with the following code

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ClassLibrary1
{
    public class MyListBox : System.Windows.Forms.ListBox
    {
        private bool mShowScroll;
        protected override System.Windows.Forms.CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                if (!mShowScroll)
                    cp.Style = cp.Style & ~0x200000;
                return cp;
            }
        }
        public bool ShowScrollbar
        {
            get { return mShowScroll; }
            set
            {
                if (value != mShowScroll)
                {
                    mShowScroll = value;
                    if (IsHandleCreated)
                        RecreateHandle();
                }
            }
        }
    }    
}

Then, I've built the project outputting a new class library ClassLibrary1.dll

On my main project, I've right-clicked the ToolBox and selected Choose Items... . Clicked on Browse... and selected the class library that I've recently created (ClassLibrary1.dll) and clicked on Open then on OK . Thus, I was able to have my custom ListBox which has no vertical scroll bars anymore.

Except from the horizontal scroll-bar, there is no way with normal use you can turn off the vertical scroll-bar.

You can only set it always visible or auto using the property ScrollAlwaysVisible (also in VB).

When you add item you can instead re-calculate ClientSize by calculating, something like this (untested, you might need to add Padding values to it as well):

 Size sz = new Size(ListBox1.ClientSize.Width, _
                    ListBox1.Items.Count * ListBox1.Font.Height);
 ListBox1.ClientSize = sz

Of course, you should add check to the value in case it is zero, and/or you want a minimum/maximum height.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM