2011-09-14 12 views
0

私は2つの列を持つWin Formを持っていて、リストビューのサイズと2番目の列の1/3のサイズの2/3の第1列の幅を使用したかったのです。リストビューを2つの列で塗りつぶし、リストビューの項目がボックスの下に来る場合は、スクロールバーを縮小して展開できるようにしたいと考えました。私はこのコードを思い付いたが、これはスクロールバーがあるときにのみ有効で、それでも列が少し拡大されて、水平スクロールバーが作成され、私は望ましくない。どんな助けもありがとうございます。ListView Column Size

private void AddColumn() 
{ 
    listView1.View = View.Details; 
    listView1.Columns.Add("Item"); 
    listView1.Columns.Add("Date Added"); 
    int itemColumnWidth = listView1.Width - SystemInformation.VerticalScrollBarWidth; 
    listView1.Columns[0].Width = itemColumnWidth/3 * 2; 
    listView1.Columns[1].Width = itemColumnWidth/3; 
} 

答えて

1

できることは、最初の列のサイズを2/3の幅に変更し、2番目の列を残りの幅に拡張するように設定することです。

残りの幅に2つ目の列を拡大するための方法は、この質問への答えで説明されています。ListView Final Column Autosize creates scrollbar

1

私はいつもこの問題を持っていました。あなたは常にスクロールバーのスペースを少しだけ減じなければなりません。少なくとも4つの追加ピクセルを減算するか、8pxから10pxまで安全に減算してください。誰も少し余分なスペースに気づくことはありません。

リストビューを実装したときに誰かが算術演算を正しく行えなかったと思います...列の内部パディングがあるはずです。デザインは、列を画面に合わせるのではなく、必要なときに追加のスペースを作成することに重点を置いているようです。 Windowsエクスプローラを考えてみましょう。列のサイズはウィンドウのサイズに決してならず、いつも厄介なスクロールバーがあります。

私たちはすべて、リストビューをVisual Studioのきれいに設計されたエラーリストのように見せたいが、そのコントロールはコントロールの幅に列を合わせることが常に保証されている別の実装のようだ。

+0

画面が別のDPIに設定されていても、この固定方法はうまくいきますか?私。境界線が2ピクセルよりもはるかに大きい場合...より安全な方法は、定数を仮定するのではなく、現在のシステム設定に基づいて境界線を除外する方法を見つけることです。 –

+0

あなたのコメントをありがとう、私はジェームスの答えを与えるだろうと思う –

+1

listView1.Widthを使用する代わりにlistView1.ClientSize.Widthを使用する必要があります。その後、余分な4ピクセルは必要ありません。完全に動作し、計算された幅に1ピクセルを追加すると、水平スクロールバーが追加され、ターゲットに正しく表示されます。 – Anlo