我有一个带有 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/