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...た。[参照... ]をクリックし、最近作成したクラスライブラリ(ClassLibrary1.dll)を選択して、[開く] 、 [ OK ]の順にクリックします。ListBoxこのようにして、垂直スクロールバーがなくなったカスタムを作成することができました。

于 2012-11-01T02:17:06.023 に答える
1

水平スクロールバーを除いて、通常の使用では垂直スクロールバーをオフにする方法はありません。

プロパティを使用してのみ、常に表示または自動に設定できますScrollAlwaysVisible(VBでも)。

アイテムを追加するときは、代わりに次のように計算してClientSizeを再計算できます(テストされていない場合は、パディング値も追加する必要がある場合があります)。

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

もちろん、値がゼロの場合、および/または最小/最大の高さが必要な場合は、値にチェックを追加する必要があります。

于 2012-11-01T02:06:37.257 に答える