刷新不会更新所有者绘制ListBox项目高度

时间:2014-02-03 11:16:48

标签: c# winforms listbox ownerdrawn

ListBox DrawMode = OwnerDrawVariable。当我动态改变一个(或多个)项目的高度并执行

listBox1.Refresh();

然后忽略新项高度,它只会正确重绘:

lalala

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

还是我错过了一些方法(尝试InvalidateUpdate)?

1 个答案:

答案 0 :(得分:0)

对我来说,只有当我删除了所有项目并再次添加它们时,OnMeasureItem事件才有效。我不能在C#中工作,所以代码在delphi中,但它应该运行得很好。

var
  tmp: TStrings;
  I: Integer;
begin
  tmp := TStrings.Create();
  try
    for I := 0 to ListBox1.Items.Count - 1 do
      tmp.Add(ListBox1.Items[I]);

    ListBox1.Items.Clear;


    for I := 0 to ListBox1.Items.Count - 1 do
      ListBox1.Items.Add(tmp[I]);

  finally
    tmp.Free;
  end;
end;

它对我有用,因为我只使用TListBox作为DISPLAY信息的控件,而不是存储它们所以我只是制作了没有任何附加变量的循环。