c# - WinForms 中多余的滚动条

标签 c# winforms resize scrollbar

我有一个带有 ListView 的 WinForms 应用程序,它随主程序窗口缩放。在调整大小时,我调整列的宽度以适应 ListView 的整个宽度。现在当我从全屏切换到正常时,我得到一个水平滚动条。这个滚动条不能滚动,即它覆盖的宽度是 ListView 宽度的 100%。换句话说,我想去掉这个滚动条。如果我在没有实际调整窗口大小的情况下短暂触摸窗口调整大小处理程序,则会重新计算宽度并且滚动条消失。我怎样才能自动摆脱那个滚动条?

column1.Width = fixedWidth;
column2.Width = listView.Width - fixedWidth - System.Windows.Forms.SystemInformation.VerticalScrollBarWidth;

最佳答案

有两个问题。它从您使用 ListView 的宽度属性开始。这在带边框的 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;
        }));
    }

关于c# - WinForms 中多余的滚动条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18804346/

相关文章:

c# - AutomationElement 获取真实类型

c# - 在C#中对由整数组成的多维[,]数组进行排序

c# - .ToUpper() 是如何工作的?

c# - 通过在 Windows 窗体中按回车键提交

c# - 当 FormBorderStyle 为 None 时,如何以编程方式显示窗口的系统菜单?

c# - 在 PictureBox() 中绘制矩形或箭头

ios - Swift - 更改 CollectionView header 的高度

c# - C#从基类访问派生类的属性

c# - 调整窗体大小时文本框大小发生变化

css 调整大小缩放完成网站