WinForms ListView:如果有列但在View.List显示模式下,如何指定ListViewItem的宽度?

时间:2010-12-07 15:41:26

标签: .net winforms listview

我对System.Windows.Forms.ListView使用的View = View.List控件。我添加的ListViewItems没有任何子项,只有文本和图标。这很好。但是我希望允许用户在运行时将View更改为View.Details。所以我在ListView控件中添加了列,在ListViewItems中添加了子项,并允许用户更改View。详细信息视图看起来很好,但在列表模式下,ListViewItems的文本被截断为仅第一个字母并具有省略号。例如,如果ListViewItem的文本是“stackoverflow”,则它显示为“s ...”。并且用户无法调整项目的大小。我怎样才能使它在View.List模式下,ListViewItems的文本看起来像我在将列和子项添加到ListViewItems之前所做的那样?

3 个答案:

答案 0 :(得分:3)

我明白了。使列更宽,以查看它具有的效果。即使它处于列表模式,看到标题控件被创建,本机Windows控件也会被混淆。在使列更宽的情况下,唯一真正的解决方法是在切换回View = List之前删除列。我建议采用后一种方法,即标题控制可能会产生一些额外的副作用。

    private void button1_Click(object sender, EventArgs e) {
        if (listView1.View == View.List) {
            listView1.View = View.Details;
            listView1.Columns.Add(new ColumnHeader());
        }
        else {
            listView1.Columns.Clear();
            listView1.View = View.List;
        }
    }

答案 1 :(得分:0)

无法重现您的问题,我猜您需要仔细检查您创建的ListViewItem并添加到Listview

答案 2 :(得分:0)

  

我们举一个带有2列的ListView示例并调整内容大小   然后到最小宽度。

// Auto resize of ListView Columns to minimum width
private int[] ColumnsWidth = { 35, 322 };

/// <summary>
/// Resize the columns based on the items entered
/// </summary>
private void ResizeColumns()
{
    // Auto Resize Columns based on content
    m_urlsListView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
    // Make sure to resize to minimum width
    if (m_urlsListView.Columns[0].Width < ColumnsWidth[0])
    {
        m_urlsListView.Columns[0].Width = ColumnsWidth[0];
    }
    if (m_urlsListView.Columns[1].Width < ColumnsWidth[1])
    {
        m_urlsListView.Columns[1].Width = ColumnsWidth[1];
    }
}