2010-12-17 22 views
7

水平スクロールバーがリストビューに表示されないようにする方法はありますか?必要に応じて縦スクロールバーを表示したいが、横スクロールバーが決して表示されないようにしたい。C#ListView水平スクロールバーを無効にする

私はそれがWndProcと何か関係があると思いますか?

おかげ

答えて

4

あなたはこのような何かを試みることができる、私は一度、プロジェクトで使用され、それが働いた:

[DllImport ("user32")] 
private static extern long ShowScrollBar (long hwnd , long wBar, long bShow); 
long SB_HORZ = 0; 
long SB_VERT = 1; 
long SB_BOTH = 3; 

private void HideHorizontalScrollBar() 
{ 
    ShowScrollBar(listView1.Handle.ToInt64(), SB_HORZ, 0); 
} 

はそれがお役に立てば幸いです。

+1

こんにちは、あなたはこれを説明することができますか、私はこれらの直接ウィンドウのすべてのAPIウィンドウを読むことができますか? – swordfish

+1

'long hwnd'の代わりに' IntPtr hwnd'をP/Invoke方法。 –

+0

第2に、P/Invokesの場合、alswaysはpinvokeを見ます。 )http://www.pinvoke.net/default.aspx/user32/ShowScrollBar.htmlシグニチャ[DllImport( "user32.dll")] [返信:MarshalAs(UnmanagedType.Bool)] public static extern bool ShowScrollBar (IntPtr hWnd、int wBar、[MarshalAs(UnmanagedType.Bool)] bool bShow); Uweがすでに言及しているIntPtrだけが問題だと思います。 –

4

@ bennyyboiの答えは、スタックをアンバランスにするので、安全ではありません。あなたはDLLIMPORTのために代わりに次のコードを使用する必要があります。

[System.Runtime.InteropServices.DllImport("user32", CallingConvention=System.Runtime.InteropServices.CallingConvention.Winapi)] 
     [return: System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)] 
     private static extern bool ShowScrollBar(IntPtr hwnd, int wBar, [System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)] bool bShow); 

アンドレアスReiffは再び見て後に上記の彼のコメントでこれをカバーしていたので、私はそれがすべてきれいにフォーマットされ、ここで推測します。

6

下のスクロールバーを削除し、縦に表示する方がはるかに簡単です。これは、ヘッダを確認することで構成されていないヘッダた場合の行は、その後listview.Width - Scrollbar.Width - 4;

次のコードは、demostrates listview.Width - 4の幅であり、垂直スクロールバーがあるかどうかを示す方法:

lv.Columns[0].Width = Width - 4 - SystemInformation.VerticalScrollBarWidth; 
+0

これは確かに選択された答えよりもはるかにクリーンなアプローチであり、実際には問題の根本的な原因です。 ListViewの列は小さくする必要があります。そのヒントのおかげで、それは私のために働いた。 – Tobias

+0

これは簡単で機能します!よくやった! – NothinRandom

+0

チェックボックスの行を使用すると、これはうまくいかないと思います。また、私は他のウィンドウのデザインはおそらく異なるサイズを使用するので、固定値は良いとは思わない。最後に、これはクリーンなアプローチではありません。スクロールバーが表示されないようにするには、スクロールバーを表示/非表示にして、他のものを調整しないでください。私はp/Invokeソリューションが気に入らないが、列幅の調整よりも優れたアプローチである。 –

1

最善の解決策How to hide the vertical scroll bar in a .NET ListView Control in Details mode

これは完全に機能し、列幅の調整のようなトリックは必要ありません。さらに、コントロールの作成時にスクロールバーを無効にすることもできます。

欠点はSystem.Windows.Forms.ListViewから派生した独自のリストビュークラスを作成して、WndProcを上書きすることです。しかし、これは行く方法です。

水平スクロールバーを無効にするには、WS_VSCROLL(リンクされた回答で使用されていた)の代わりにを使用してください。 WS_HSCROLLの値は0x00100000です。

関連する問題