如何解决Windows ListView问题?

时间:2016-06-24 08:43:25

标签: winforms listview controls

如果向下滚动列表视图(在“详细信息”模式下),然后调整列表视图的大小,并且在Resize事件或甚至是Layout事件中调整列的大小,则内容会严重损坏。

要重现,请创建一个新的C#项目并将此代码放在其中:

    private void Form1_Load(object sender, EventArgs e)
    {
        ListView lv = new ListView();
        lv.Size = ClientSize;
        lv.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;
        lv.Columns.Add(new ColumnHeader());
        lv.Columns.Add(new ColumnHeader());
        lv.View = View.Details;
        lv.FullRowSelect = true;
        lv.Resize += lv_Resize;
        Controls.Add(lv);

        string[] s = new string[2];
        s[0] = "hrd";
        s[1] = "igwegmg";        
        for (int i = 0; i < 20; i++)
        {
            lv.Items.Add(new ListViewItem(s));
        }

        lv_Resize(lv, null);
    }

    private void lv_Resize(object sender, EventArgs e)
    {
        ListView lv = (ListView)sender;
        lv.Columns[1].Width = lv.ClientSize.Width - lv.Columns[0].Width;
    }

运行它,向下滚动列表,调整表单大小以通过向下拖动表单底部来显示所有项目。

将其缩小到滚动条显示的位置,然后变得更糟。 或者不是仅调整大小来最大化并恢复表单。

另请注意,列表视图顶部的空白项目(取决于您滚动了多少),您无法点击它们。要恢复正常,你必须做两件事之一。

  1. 重新填充物品(不好 - 我的物品太多而且我的滚动位置丢失了。)

  2. 手动如果您将表单调整到弹出滚动条的位置,然后将滚动条滚动到底部,然后将鼠标从滚动条上移开,然后返回滚动条顶部,您将看到滚动条自行调整大小,此时您可以将滚动条拖动到顶部,然后将其拖回正常状态。

  3. 如果你RedrawItems,那么至少你可以再次看到所有项目,但仍然会在顶部找到空白项目。在调整大小/布局事件后调用begininvoke的函数执行RedrawItems并不总是有效。

    有关此错误的任何想法?我真的不想使用任何其他控件或第三方软件。

1 个答案:

答案 0 :(得分:0)

注意到我的应用中的其他ListView未显示错误。找出它是因为他们正在调整Form的Resize事件中的列。

解决方法:不要调整ListView.Resize()中的列,但要在Form.Resize()事件中执行此操作。

我打开这个小小的时候,你们中的一些人已经在研究使用ListView.Resize()

的解决方法