WinForms中多余的滚动条

尼古拉斯78

我有一个WinForms应用程序,ListView应用程序随主程序窗口缩放。在OnResize上,我调整列的宽度以适合的整个宽度ListView现在,当我从全屏切换到普通时,我得到了一个水平滚动条。此滚动条无法滚动,即它覆盖的宽度是ListView宽度的100%。换句话说,我想摆脱这个滚动条。如果我在不实际调整窗口大小的情况下短时间触摸窗口调整大小处理程序,则会重新计算宽度,并且滚动条会消失。我如何自动摆脱该滚动条?

column1.Width = fixedWidth;
column2.Width = listView.Width - fixedWidth - System.Windows.Forms.SystemInformation.VerticalScrollBarWidth;
汉斯·帕桑特

有两个问题。首先使用列表视图的Width属性。在带边框的ListView上这是不正确的,您需要使用ClientSize.Width属性。第二个问题与自动布局的计算方式有关,它导致Resize事件触发得太早。您可以通过使用Control.BeginInvoke()延迟调整来解决此问题。像这样:

    private void listView1_Resize(object sender, EventArgs e) {
        this.BeginInvoke(new Action(() => {
            var lv = (ListView)sender;
            var w = 0;
            for (int ix = 0; ix < lv.Columns.Count - 1; ++ix) w += lv.Columns[ix].Width;
            w = Math.Max(0, lv.ClientSize.Width - w);
            lv.Columns[lv.Columns.Count - 1].Width = w;
        }));
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章