【发布时间】:2014-03-17 21:28:12
【问题描述】:
我有ListBox 和DrawMode = OwnerDrawVariable。当我动态改变一个(或多个)项目的高度并做
listBox1.Refresh();
然后忽略新的项目高度,它只会正确重绘:
Ok - 最初是扩展项,Not ok- 是通过鼠标扩展的。
测量项代码并不复杂,我在最后用断点检查了e.ItemHeight = 90,但是,项的高度仍然是20。
private void listBox1_MeasureItem(object sender, MeasureItemEventArgs e)
{
// ... get item
e.ItemHeight = 20;
if(!collapsed)
e.ItemHeight = 20 + 10 * n; // n - number of child rows
}
问题:可以这样做(可行)
listBox1.DataSource = null;
listBox1.DataSource = list; // list of my items
还是我错过了一些方法(尝试过Invalidate 和Update)?
【问题讨论】:
-
@LarsTech,一个月前你去哪儿了? =D 顺便说一句,到目前为止,重新分配
DataSource的“解决方案”效果出奇的好(它不会闪烁太多)。由于某些原因,ListBox能够维持SelectedIndex(或SelectedItem),但 不能SelectedItems(带有SelectionMode=MiltiExtended),所以我可能会回到您的解决方案(带有子类化列表框重新创建句柄)有一天。谢谢。
标签: c# winforms listbox ownerdrawn