none
ListViewのスクロールバーを非表示にする方法 RRS feed

  • 質問

  • こんにちは。

    最近VC++Expressをつかって、Windows Form のプログラミングを体験しています。

    ListViewコンポーネントについて質問なのですが、ListViewのスクロールバーを

    非表示にする方法はありますか?Scrollableプロパティをfalseにすると、たしかに

    スクロールバーが非表示になるのですが、キーボード操作による選択位置の

    変更によるスクロールまでもが効かなくなってしまいます。

     

    実現したいのは、

    • スクロールバーを非表示にしたい
    • キーボード入力などによってスクロールする処理は残しておきたい

    です。ListViewのプロパティやハンドラの変更によってこれが可能であるか、

    ご存知のかたがおられましたら、お聞かせください。

    2006年2月18日 14:15

すべての返信

  • Panel コントロールに Add して、スクロール バーを表示できない位置に配置するとか。
    そういった方法の方が現実的でしょうね。

    2006年2月18日 15:42
  • スクロールバーの幅はユーザ環境によって変化しますよね。

    スクロールバーの幅を取得しておいて、

    その分だけListViewの幅を大きくする、

    ということをやるわけですね。

     

    なんとなくすっきりしない解決法ですので、

    まずは自前のリストコントロールを作ることを検討したいと思います。

    参考になりました。どうもありがとうございます。

     

    2006年2月20日 1:22
  • いとけんです。

    こんなかんじで消せますよ。

    あと、スクロールは API の ListView_Scroll で行ってください。

                /// <summary>
                /// ウインドウメッセージを受信する
                /// </summary>
                /// <param name="m">メッセージ</param>
                protected override void WndProc(ref Message m)
                {
                    switch (m.Msg)
                    {
                        case Win32Methods.WM_NCCALCSIZE:
                            {
                                //スクロールバーを強制非表示
                                int ws = Win32Methods.GetWindowLong(Handle, Win32Methods.GWL_STYLE);
                                ws &= Win32Methods.WS_VSCROLL | Win32Methods.WS_HSCROLL;
                                if (ws != 0)
                                {
                                    Win32Methods.ShowScrollBar(Handle, Win32Methods.SB_BOTH, false);
                                }
                                return;
                            }
                    }
                    base.WndProc(ref m);
                }

    2006年2月20日 8:15
  • いとけんさん、

    ご教示いただき、どうもありがとうございます。

    例示していただいたとおり、ListViewを継承して

    WndProcをカスタマイズしたクラスを作ることで、

    期待する動作にすることができました。

     

    Handleというプロパティで、HWNDを取得できることが分かり、

    大変ためになりました。これでWin32APIを呼び出して、

    痒いところに手が届きます。

     

    2006年2月20日 17:02