C#ListView,View=List-如何去掉底部未使用的空间?

C#ListView,View=List-如何去掉底部未使用的空间?,c#,listview,C#,Listview,在View=List的C#ListView中,底部有空的空间,保留给滚动条。奇怪的是,设置Scrollable=false只会增加这个未使用空间的大小 我怎样才能摆脱这个空间或确保它用于显示项目 编辑: 我在Windows窗体应用程序中遇到此问题 编辑2:这个问题似乎与字体大小有关。我需要字体大小为9磅。对于11 pt,此问题不会出现 编辑3:我也试过,但也没用 编辑4:它发生在带有Win7主题的Win7下。但是,至少在Scrollable=false的情况下,经典主题不会出现这种情况 仍然希望

在View=List的C#ListView中,底部有空的空间,保留给滚动条。奇怪的是,设置Scrollable=false只会增加这个未使用空间的大小

我怎样才能摆脱这个空间或确保它用于显示项目

编辑: 我在Windows窗体应用程序中遇到此问题

编辑2:这个问题似乎与字体大小有关。我需要字体大小为9磅。对于11 pt,此问题不会出现

编辑3:我也试过,但也没用

编辑4:它发生在带有Win7主题的Win7下。但是,至少在Scrollable=false的情况下,经典主题不会出现这种情况


仍然希望有一个更优雅的解决方案,但现在,我发现了以下解决方法:

你可以用一个面板来消除多余的空间。我是从陶的回答中得到这个想法的

记住,这对我很有用,因为我不想要或不需要滚动条

        listView1.Scrollable = true;
        int itemHeight = listView1.GetItemRect(0).Height;
        int numItemsPerColumn = 10;
        //One needs to add 21 to the height, because even if no Scrollbar
        //is needed, that space will stay reserved.
        listView1.Size = new Size(500, itemHeight * numItemsPerColumn + 21);
        Panel P = new Panel();
        P.BackColor = listView1.BackColor;
        P.Location = listView1.Location;
        //The height you actually want
        P.Size = new Size(500, itemHeight * numItemsPerColumn + 4);
        P.BorderStyle = listView1.BorderStyle;
        listView1.BorderStyle = BorderStyle.None;
        listView1.Parent = P;
        listView1.Location = new Point(0, 0);
        this.Controls.Add(P);

仍然希望有一个更优雅的解决方案,但现在,我找到了以下解决方法:

你可以用一个面板来消除多余的空间。我是从陶的回答中得到这个想法的

记住,这对我很有用,因为我不想要或不需要滚动条

        listView1.Scrollable = true;
        int itemHeight = listView1.GetItemRect(0).Height;
        int numItemsPerColumn = 10;
        //One needs to add 21 to the height, because even if no Scrollbar
        //is needed, that space will stay reserved.
        listView1.Size = new Size(500, itemHeight * numItemsPerColumn + 21);
        Panel P = new Panel();
        P.BackColor = listView1.BackColor;
        P.Location = listView1.Location;
        //The height you actually want
        P.Size = new Size(500, itemHeight * numItemsPerColumn + 4);
        P.BorderStyle = listView1.BorderStyle;
        listView1.BorderStyle = BorderStyle.None;
        listView1.Parent = P;
        listView1.Location = new Point(0, 0);
        this.Controls.Add(P);

这可能有助于WPF解决方案如何帮助??-这真的很奇怪。我从不使用列表模式,但仍然看起来有点像它试图以11磅的字体容纳12个项目。没道理……我想你知道些什么。问题出现在9pt字体上。如果我把它改成11,空间就没有了!似乎listView有一些内部参考高度来计算一列中的项目数,当字体大小改变时,它不会得到正确更新。是的,或者它对dpi意识有一些不太聪明的想法,或者说缺乏dpi意识。我想知道@Hans Passant是否可以帮我们解决这个问题顺便说一句:这个问题既不清楚也不缺乏代码。这可能有助于WPF解决方案的帮助???-这真的很奇怪。我从不使用列表模式,但仍然看起来有点像它试图以11磅的字体容纳12个项目。没道理……我想你知道些什么。问题出现在9pt字体上。如果我把它改成11,空间就没有了!似乎listView有一些内部参考高度来计算一列中的项目数,当字体大小改变时,它不会得到正确更新。是的,或者它对dpi意识有一些不太聪明的想法,或者说缺乏dpi意识。我想知道@Hans Passant是否可以帮我们解决这个问题顺便说一句:这个问题既不清楚也不缺乏代码。