C# 在列表框控件中隐藏垂直滚动条

C# 在列表框控件中隐藏垂直滚动条,c#,winforms,listbox,C#,Winforms,Listbox,我正在开发一个需要ListBox控件的应用程序。不幸的是,当我在列表框中添加太多项目时,会显示一个垂直滚动条。我可以做些什么来隐藏列表框显示的垂直滚动条吗?我可以看到,有一个属性可以隐藏水平滚动条,但没有垂直滚动条的属性。除了水平滚动条,正常使用时无法关闭垂直滚动条 只能使用属性ScrollAlwaysVisible(也在VB中)将其设置为始终可见或自动 当您添加项时,您可以通过计算来重新计算ClientSize,类似于这样(未测试,您可能还需要向其添加填充值): 当然,如果值为零和/或需要最小

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

除了水平滚动条,正常使用时无法关闭垂直滚动条

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

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


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

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

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


在我的主项目中,我右键单击了
工具箱
,并选择了
选择项…
。单击浏览…并选择我最近创建的类库(ClassLibrary1.dll),然后单击打开,然后单击确定。因此,我可以拥有我的自定义
列表框
,它不再有垂直滚动条。

如果删除垂直滚动条,用户将如何访问滚动条边缘以外的项目?@Leetylor感谢您的回复。我忘了提到我有一个RichTextBox。我已经成功地控制了RichTextBox中的列表框。因此,不需要在列表框中显示滚动条。祝你度过愉快的一天:)好的,我不知道有什么方法可以删除滚动条。我知道的唯一方法是确保列表框足够长,可以容纳所有项目。谢谢,我已经成功隐藏了创建类库的垂直滚动条。我将在稍后发布我的解决方案:)很好:-)正如您所问,是否可以使用ListBox控件完成此操作,我将保留我的答案:-)没有问题。谢谢你的回答。祝你今天愉快:)
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();
                }
            }
        }
    }    
}