在ListBox控件中隐藏垂直滚动条

时间:2012-11-01 01:46:43

标签: c# winforms listbox

我正在开发一个需要ListBox控件的应用程序。不幸的是,当我在ListBox中添加太多项目时,会显示一个垂直滚动条。我可以做些什么来隐藏ListBox所示的垂直滚动条?我可以看到有一个属性可以隐藏水平滚动条,但是垂直滚动条没有属性。

2 个答案:

答案 0 :(得分:8)

问题解决了。我只是使用以下代码

创建了一个模板类库的新项目
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();
                }
            }
        }
    }    
}

然后,我构建了输出新类库的项目 ClassLibrary1.dll

在我的主要项目中,我右键点击了 ToolBox 并选择了 Choose Items... 。点击浏览... 并选择我最近创建的类库(ClassLibrary1.dll)并点击打开然后点击确定 。因此,我能够拥有我的自定义ListBox,它不再有垂直滚动条。

答案 1 :(得分:1)

除水平滚动条外,无法正常使用,您可以关闭垂直滚动条。

您只能使用属性ScrollAlwaysVisible(也在VB中)将其设置为始终可见或自动。

当您添加项目时,您可以通过计算来重新计算ClientSize,类似这样(未经测试,您可能还需要向其添加填充值):

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

当然,如果值为零,您应该添加检查值,和/或您想要最小/最大高度。