添加项目时,Windows窗体ListBox无法正确调整水平滚动条的大小

时间:2011-06-01 15:53:05

标签: c# listbox scrollbar

我正在开发一个具有ListBox的应用程序,我可以通过加载文件或单击“添加”按钮来填充该列表,该按钮显示一个对话框以提示用户提供一些信息。从该对话框点击“保存”后,结果将添加到ListBox。但是,由于某些原因,在此之后,水平滚动条不能正确调整大小。

通常它会出现,但它最右边仍会模糊大部分文字。奇怪的是,当双击项目时会显示相同的对话框,我单击取消,滚动条正确调整大小。我试过lstItems.Refesh()无济于事,导致滚动条从这个“添加”提示正确调整大小的唯一解决方法是将结果添加两次,然后删除一个。这是相关的代码:

添加提示的原始代码(不起作用):

private void btnItemAdd_Click(object sender, EventArgs e)
{
    editForm editFrm = new editForm();
    editFrm.ShowDialog();
    if (editFrm.Result != null)
    {
        lstItems.Items.Insert(lstItems.Items.Count, editFrm.Result);
        lstItems.Refresh();
    }
}

解决方法:

private void btnItemAdd_Click(object sender, EventArgs e)
{
    editForm editFrm = new editForm();
    editFrm.ShowDialog();
    if (editFrm.Result != null)
    {
        lstItems.Items.Insert(lstItems.Items.Count, editFrm.Result);
        lstItems.Items.Insert(lstItems.Items.Count, editFrm.Result);
        lstItems.Items.RemoveAt(lstItems.Items.Count - 1);
        lstItems.Refresh();
    }
}

可能相关。 doubleclick事件的代码:

private void lstItems_DoubleClick(object sender, EventArgs e)
{
    if (lstItems.SelectedItem != null)
    {
        editForm editFrm = new editForm(lstItems.SelectedItem.ToString());
        editFrm.ShowDialog();
        lstItems.Items.Insert(lstItems.SelectedIndex, editFrm.Result);
        lstItems.Items.RemoveAt(lstItems.SelectedIndex);
        lstItems.Refresh();
    }
}

为什么会发生这种情况,是否有可能的解决方案?

修改:好像有人对我的问题进行了投票。如果你留下一个评论,为什么它应该得到一个downvote而不是一个打击和运行的种类,我会很感激:/这个问题不清楚吗?如果有必要,我很乐意尝试解释更多。我怀疑这是由于缺乏“研究”。如果您愿意,我可以链接到Google结果。显然,在我的搜索中,没有其他人遇到过这个问题。我尝试使用如here所示的Horizo​​ntalExtent属性,但这也不起作用。

1 个答案:

答案 0 :(得分:0)

听起来像删除行会导致重新评估滚动条,但添加不会。我可以想到强制执行此功能的一种方法是使列表框无效并重绘:如下所示:

lstItems.Invalidate();
lstItems.Redraw();