8

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

4

2 回答 2

9

问题解决了。我只是使用以下代码创建了一个模板类库的新项目

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.... 单击Browse...并选择我最近创建的类库 (ClassLibrary1.dll) 并单击Open然后单击 OK。因此,我能够ListBox拥有不再有垂直滚动条的自定义。

于 2012-11-01T02:17:06.023 回答
1

除了水平滚动条之外,正常使用是无法关闭垂直滚动条的。

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

当您添加项目时,您可以通过计算重新计算 ClientSize,如下所示(未经测试,您可能还需要向其添加 Padding 值):

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

当然,您应该检查该值以防它为零,和/或您想要一个最小/最大高度。

于 2012-11-01T02:06:37.257 回答