窗口应用程序中的列表框项目超出了列表框

3
我在列表框中遇到了UI问题。这个问题非常不一致,有时它出现在第一个按钮上,有时是在点击多次或使用列表框滚动条后出现。我不知道它是如何产生的,也不知道它来自哪里。
很抱歉我无法定义这个问题,但是我附上了一个说明该问题的图片:
https://istack.dev59.com/O6M1T.webp 我已经为选中和取消选中所有项目编写了一些代码,代码如下:
private void btnSelectAll_Click(object sender, EventArgs e)
        {
            lstSelectRows.SelectionMode = SelectionMode.MultiSimple;
            for (int i = 0; i < lstSelectRows.Items.Count; i++)
            {
                lstSelectRows.SetSelected(i, true);
            }
        }

private void btnSelectNone_Click(object sender, EventArgs e)
        {
            this.lstSelectRows.SelectedIndex = -1;
        }

1
这是新的情况。这在其他电脑上也会发生吗? - LarsTech
我已经在另一台电脑上进行了检查。我认为在另一台电脑上它正常工作。 - Amit Kumar
1
请查看Listbox显示问题 - LarsTech
谢谢Lars。它有效。 - Amit Kumar
@Amit:下面的答案正确吗?如果是的话,接受它会很好。 - halfer
1个回答

1
为了避免出现这样的视觉故障,请确保在更新项目时暂停绘制。
只需在更新项目之前调用 ListBox.BeginUpdate(),然后在完成后调用 ListBox.EndUpdate()
private void btnSelectAll_Click(object sender, EventArgs e)
        {
            lstSelectRows.BeginUpdate();
            lstSelectRows.SelectionMode = SelectionMode.MultiSimple;
            for (int i = 0; i < lstSelectRows.Items.Count; i++)
            {
                lstSelectRows.SetSelected(i, true);
            }
            lstSelectRows.EndUpdate();
        }

private void btnSelectNone_Click(object sender, EventArgs e)
        {
            lstSelectRows.BeginUpdate();
            this.lstSelectRows.SelectedIndex = -1;
            lstSelectRows.EndUpdate();
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接