93

listviewac# winformsコントロールの列幅を自動に設定するにはどうすればよいですか。width = -1 / -2 のようなものですか?

4

10 に答える 10

115

答えは次のとおりです。-2 は列ヘッダーのテキストの長さに合わせて列を自動サイズ調整し、-1 は列内の最も長い項目に合わせて自動サイズ調整します。すべて MSDN によると。ただし、-1 の場合、項目を追加した後に列幅を設定する必要があることに注意してください。したがって、新しいアイテムを追加する場合は、コントロール内のデータに従って自動サイズ設定する列 (または列) の width プロパティも割り当てる必要がありますListView

于 2009-08-10T22:10:53.760 に答える
23

リストビューを何度もクリアして補充するプログラムを作成しました。何らかの理由で、幅 = -2 の列を追加するたびに、最初の列が長すぎるという問題が発生しました。これを修正するために私がしたことは、このメソッドを作成することでした。

private void ResizeListViewColumns(ListView lv)
{
    foreach(ColumnHeader column in lv.Columns)
    {
        column.Width = -2;
    }
}

この方法の素晴らしい点は、これをどこにでも配置して、すべての列のサイズを変更できることです。を渡すだけListViewです。

于 2012-07-18T20:02:56.533 に答える
3

親パネル(ListViewドックフィル)にListViewがある場合は、単純にメソッドを使用できます...

private void ListViewHeaderWidth() {
        int HeaderWidth = (listViewInfo.Parent.Width - 2) / listViewInfo.Columns.Count;
        foreach (ColumnHeader header in listViewInfo.Columns)
        {
            header.Width = HeaderWidth;
        }
    }
于 2019-03-17T09:07:24.303 に答える
1

このソリューションは、最初に列データに基づいて列のサイズを変更します。サイズ変更された幅がヘッダー サイズよりも小さい場合は、少なくともヘッダーに収まるように列のサイズを変更します。これはかなり醜い解決策ですが、うまくいきます。

lstContacts.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
colFirstName.Width = (colFirstName.Width < 60 ? 60 : colFirstName.Width);
colLastName.Width = (colLastName.Width < 61 ? 61 : colLastName.Width);
colPhoneNumber.Width = (colPhoneNumber.Width < 81 ? 81 : colPhoneNumber.Width);
colEmail.Width = (colEmail.Width < 40 ? 40 : colEmail.Width);

lstContacts は ListView です。colFirstName は列で、60 はタイトルに合わせて必要な幅です。等。

于 2014-12-10T21:52:47.283 に答える
1

このようなものを使用して、必要な ListView をパラメーターに渡すことができます

    private void AutoSizeColumnList(ListView listView)
    {
        //Prevents flickering
        listView.BeginUpdate();

        Dictionary<int, int> columnSize = new Dictionary<int,int>();

        //Auto size using header
        listView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);

        //Grab column size based on header
        foreach(ColumnHeader colHeader in listView.Columns )
            columnSize.Add(colHeader.Index, colHeader.Width);

        //Auto size using data
        listView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);

        //Grab comumn size based on data and set max width
        foreach (ColumnHeader colHeader in listView.Columns)
        {
            int nColWidth;
            if (columnSize.TryGetValue(colHeader.Index, out nColWidth))
                colHeader.Width = Math.Max(nColWidth, colHeader.Width);
            else
                //Default to 50
                colHeader.Width = Math.Max(50, colHeader.Width);
        }

        listView.EndUpdate();
    }
于 2018-07-31T20:29:57.680 に答える