2011-06-01 61 views
1

我正在处理具有ListBox的应用程序,该列表框可以通过加载文件或单击显示对话框以提示某些信息的“添加”按钮来填充来自用户。点击该对话框中的“保存”后,结果将被添加到列表框中。但是,由于某些原因发生这种情况后,水平滚动条不能正确调整大小。Windows窗体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(); 
    } 
} 

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

编辑:看起来好像有人已经低估了我的问题。如果你留下了评论,为什么它应该得到一个倒退,而不是一个碰运气的问题,我会很感激:/问题不明确吗?如果有必要,我很乐意尝试和解释更多。我怀疑这是由于缺乏“研究”。如果您愿意,我可以链接到Google结果。显然,在我的搜索中,没有人遇到过这个问题。我尝试使用Horizo​​ntalExtent属性,如here所示,但这也不起作用。

+0

你为什么要使用ListBox.Items.Insert()方法,而不是ListBox.Items.Add() ? – Bernard 2011-06-01 16:05:28

+0

@Bernard哦,呵呵。甚至没有想到这一点。我相信这是因为我首先编写了需要插入而不是添加的doubleclick代码,并且只是将其复制过来。我将它改为现在添加,但仍然无法正确重绘。 – Omega192 2011-06-01 17:06:54

回答

0

这听起来像移除行导致滚动条被重新评估,但添加没有。我能想到的一种方式,迫使该功能将失效并重绘列表框,如下所示:

lstItems.Invalidate(); 
lstItems.Redraw(); 
+0

这就是我所想的,因为它是两者之间的唯一区别。 RemoveAt重新评估滚动条,而Insert不。 参考您的修复程序,我曾尝试过无效,然后刷新之前,但也没有工作。 ListBox没有重绘方法,但它有一个Update方法,看起来可以做同样的事情。不幸的是,它没有正确地重新评估滚动条。 这似乎是愚蠢的简单功能,我不知道为什么这么难。 – Omega192 2011-06-01 16:52:25

相关问题