水平スクロールバーがリストビューに表示されないようにする方法はありますか?必要に応じて縦スクロールバーを表示したいが、横スクロールバーが決して表示されないようにしたい。C#ListView水平スクロールバーを無効にする
私はそれがWndProcと何か関係があると思いますか?
おかげ
水平スクロールバーがリストビューに表示されないようにする方法はありますか?必要に応じて縦スクロールバーを表示したいが、横スクロールバーが決して表示されないようにしたい。C#ListView水平スクロールバーを無効にする
私はそれがWndProcと何か関係があると思いますか?
おかげ
あなたはこのような何かを試みることができる、私は一度、プロジェクトで使用され、それが働いた:
[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);
}
はそれがお役に立てば幸いです。
@ 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は再び見て後に上記の彼のコメントでこれをカバーしていたので、私はそれがすべてきれいにフォーマットされ、ここで推測します。
下のスクロールバーを削除し、縦に表示する方がはるかに簡単です。これは、ヘッダを確認することで構成されていないヘッダた場合の行は、その後listview.Width - Scrollbar.Width - 4;
次のコードは、demostrates listview.Width - 4
の幅であり、垂直スクロールバーがあるかどうかを示す方法:
lv.Columns[0].Width = Width - 4 - SystemInformation.VerticalScrollBarWidth;
これは確かに選択された答えよりもはるかにクリーンなアプローチであり、実際には問題の根本的な原因です。 ListViewの列は小さくする必要があります。そのヒントのおかげで、それは私のために働いた。 – Tobias
これは簡単で機能します!よくやった! – NothinRandom
チェックボックスの行を使用すると、これはうまくいかないと思います。また、私は他のウィンドウのデザインはおそらく異なるサイズを使用するので、固定値は良いとは思わない。最後に、これはクリーンなアプローチではありません。スクロールバーが表示されないようにするには、スクロールバーを表示/非表示にして、他のものを調整しないでください。私はp/Invokeソリューションが気に入らないが、列幅の調整よりも優れたアプローチである。 –
最善の解決策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
です。
こんにちは、あなたはこれを説明することができますか、私はこれらの直接ウィンドウのすべてのAPIウィンドウを読むことができますか? – swordfish
'long hwnd'の代わりに' IntPtr hwnd'をP/Invoke方法。 –
第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だけが問題だと思います。 –